Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database Rails 3-使用CONTROLLER.new保存数据(params[:CONTROLLER])_Database_Ruby On Rails 3_File Upload - Fatal编程技术网

Database Rails 3-使用CONTROLLER.new保存数据(params[:CONTROLLER])

Database Rails 3-使用CONTROLLER.new保存数据(params[:CONTROLLER]),database,ruby-on-rails-3,file-upload,Database,Ruby On Rails 3,File Upload,我是Rails的新手,现在我正在解决这个问题,如何最有效地将数据保存到数据库中。我的表单包含10个输入(=表中的10列),第11个输入用于文件 如果我用 @mail = Mail.find(params[:id]).save 所以我会把这样的东西放到我的桌子上(科伦): 但我只需要存储文件名——“panama-city-15.jpg”。因此,选项是对每个输入进行单独保存,如下所示: @mail = Mail.new(:mail_id => @mail_source.id.to_i,

我是Rails的新手,现在我正在解决这个问题,如何最有效地将数据保存到数据库中。我的表单包含10个输入(=表中的10列),第11个输入用于文件

如果我用

@mail = Mail.find(params[:id]).save
所以我会把这样的东西放到我的桌子上(科伦):

但我只需要存储文件名——“panama-city-15.jpg”。因此,选项是对每个输入进行单独保存,如下所示:

@mail = Mail.new(:mail_id => @mail_source.id.to_i,
                 :a => params[:mail][:a],
                 :b => params[:mail][:b],
                 ...
                 :logo => params[:mail][logo].original_filename)
但我认为,由于“params[:mail][logo]。原始文件名”…,所以键入10行有点不必要


因此,我想问您,如果存在更好的方法,如何解决这种情况…

有一种标准方法可以为模型分配属性:

@mail = Mail.find(params[:id])
@mail.attributes = params[:mail]
if @mail.save
  #...and so on.
您可以定义所有必需的访问器,这些访问器不需要与数据库中的列相同,并且您可能希望了解有关方法的信息

因此,如果要存储上载文件的原始文件名,可以执行以下操作:

# Beware: this is only an example of technical possibility.
# Do not handle uploaded files in this way!
#
def logo=(f)
  self[:logo] = f.original_filename
end
但我认为这是个坏主意。如果只存储原始文件名,则会丢失该文件。它将在您处理请求后立即从服务器中删除。你必须把文件存放在某个地方

# This may work for you.
#
def logo=(f)
  return unless f.respond_to?(:read) && f.respond_to?(:original_filename)
  f.rewind
  self[:logo_content] = f.read
  self[:logo_filename] = f.original_filename
end
如果写入“
@mail=mail.find(params[:id]).save
”,则
@mail
变量的值将为true或false。
save
方法不返回保存的对象。当心!
# This may work for you.
#
def logo=(f)
  return unless f.respond_to?(:read) && f.respond_to?(:original_filename)
  f.rewind
  self[:logo_content] = f.read
  self[:logo_filename] = f.original_filename
end