Database Rails 3-使用CONTROLLER.new保存数据(params[:CONTROLLER])
我是Rails的新手,现在我正在解决这个问题,如何最有效地将数据保存到数据库中。我的表单包含10个输入(=表中的10列),第11个输入用于文件 如果我用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,
@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