如果存在用新数据覆盖,否则在 rails 中创建新行
if exists overwrite with new data else create new row in rails
我正在使用 Ruby 2 和 Rails 4。如果 'name' 不存在,我想创建新数据,如果存在,则用新数据更新。从我的图片来看,如果 'lol' 存在,则在上传时更新新的 pdf 文件,否则使用新数据创建新行。我怎样才能做到这一点?如果有什么想法请与我分享。
我的代码是:
Static_pages 控制器:
def create_form
@form_downup = Contact.new(contact_params)
if @form_downup.save
redirect_to :back
else
redirect_to downloads_form_path
end
end
private
def contact_params
params.require(:contact).permit(:name,:file)
end
downloads_form.html.erb
<table class="table table-condensed table-responsive">
<tbody>
<%= form_tag create_form_path, multipart: true do |f| %>
<tr>
<td class=""><%= text_field_tag "contact[name]", nil, class: "form-control" %></td>
<td><%= file_field_tag "contact[file]", class: "form-control" %></td>
<td><%= submit_tag 'Upload' %></td>
<td><%= link_to "Download", static_pages_downloadform_pdf_path(:file_name => "lol") %></td>
</tr>
<% end %>
</tbody>
</table>
我知道这看起来有点难看,但应该可以解决问题
def create_form
contact = Contact.find_or_initialize_by(name: params[:contact][:name])
contact.file = params[:contact][:file]
if contact.save
redirect_to :back
else
redirect_to downloads_form_path
end
end
您可以使用 find_or_initialize_by
.
def create_form
@form_downup = Contact.find_or_initialize_by(name: params[:contact][:name])
@form_downup.file = params[:contact][:file]
if @form_downup.save
redirect_to :back
else
redirect_to downloads_form_path
end
end
得到解决方案
@form_downup = Contact.find_or_create_by(:name => contact_params[:name])
@form_downup.file=contact_params[:file]
@form_downup.save
我正在使用 Ruby 2 和 Rails 4。如果 'name' 不存在,我想创建新数据,如果存在,则用新数据更新。从我的图片来看,如果 'lol' 存在,则在上传时更新新的 pdf 文件,否则使用新数据创建新行。我怎样才能做到这一点?如果有什么想法请与我分享。
我的代码是: Static_pages 控制器:
def create_form
@form_downup = Contact.new(contact_params)
if @form_downup.save
redirect_to :back
else
redirect_to downloads_form_path
end
end
private
def contact_params
params.require(:contact).permit(:name,:file)
end
downloads_form.html.erb
<table class="table table-condensed table-responsive">
<tbody>
<%= form_tag create_form_path, multipart: true do |f| %>
<tr>
<td class=""><%= text_field_tag "contact[name]", nil, class: "form-control" %></td>
<td><%= file_field_tag "contact[file]", class: "form-control" %></td>
<td><%= submit_tag 'Upload' %></td>
<td><%= link_to "Download", static_pages_downloadform_pdf_path(:file_name => "lol") %></td>
</tr>
<% end %>
</tbody>
</table>
我知道这看起来有点难看,但应该可以解决问题
def create_form
contact = Contact.find_or_initialize_by(name: params[:contact][:name])
contact.file = params[:contact][:file]
if contact.save
redirect_to :back
else
redirect_to downloads_form_path
end
end
您可以使用 find_or_initialize_by
.
def create_form
@form_downup = Contact.find_or_initialize_by(name: params[:contact][:name])
@form_downup.file = params[:contact][:file]
if @form_downup.save
redirect_to :back
else
redirect_to downloads_form_path
end
end
得到解决方案
@form_downup = Contact.find_or_create_by(:name => contact_params[:name])
@form_downup.file=contact_params[:file]
@form_downup.save