[英]Ruby on Rails: Nested Attributes, saving multiple records in single text area
如何使用單個text_area保存具有嵌套屬性的多個記錄? 文本框中的每一行或用逗號分隔的每一行都應是單獨的記錄。
控制器的外觀如何?
_form.html.erb
<%= simple_form_for @project do |f| %>
<%= f.simple_fields_for :products do |g| %>
<%= render 'product_fields', :f => g %>
<% end%>
<%= link_to_add_association 'add item', f, :products %>
<% end %>
_product_fields.html.erb
<%= f.text_field :category, placeholder: "Category" %>
<%= f.text_area :item, placeholder: "List your products (separated by each line or comma)" %>
project_controller.rb
def create
@project = Project.new(project_params)
respond_to do |format|
format.js
if @project.save
format.html { redirect_to @project, notice: 'Project was successfully created.' }
format.json { render :show, status: :created, location: @project }
else
format.html { render :new }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
end
end
def project_params
params.require(:project).permit(
:user_id,
products_attributes: [:id, :item, :hyperlink, :_destroy, :category]).merge(user_id: current_user.id)
end
我想進入我的項目表單,然后有一個很大的text_area,可以在其中添加產品列表,並且每個產品(用“ enter”或“逗號”分隔)都是一個記錄。
編輯----
添加模型:
class Project < ActiveRecord::Base
has_many :products, dependent: :destroy
accepts_nested_attributes_for :products, :reject_if => :all_blank, allow_destroy: true
end
class Product < ActiveRecord::Base
belongs_to :project
end
通常,您無需太多操作即可保存參數。 如果要將text_area參數轉換為多個記錄,只需將其切碎並在控制器中進行處理即可。
假設您使用新行來描述產品,因此您的文本區域如下所示:
產品1
產品2
產品3
project_params[:product_list] = "product1\nproduct2\nproduct3"
prod_arr = project_params[:product_list].split("\n")
prod_arr.each do |product|
#you now have your product name in the local variable product
#you can now save each one separately. You will probably
#need to take common items of the params hash and insert the
#current product, then save.
end
您可以選擇分割幾乎所有字符。 但是,選擇一個有意義的選項,然后對要拆分的字符串進行某種檢查。 注意split("\\n")
使用雙引號,這是告訴Ruby您正在談論換行符所必需的。 如果使用split('\\n')
,它將無法正常工作。
如果您想確保它們全部保存,我還將考慮將其包裝在事務中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.