Rails: 数组传值给强参数

Rails: Pass value from array to strong parameters

我有一个文本框 'ohrmarke',我可以在新行中输入多个字符串,单击创建按钮后,文本框中的值将被“\r\n”删除,每个值存储在数组中。这一切都发生在控制器的创建方法中。

表格:

<%= simple_form_for Cow.new do |f| %>
    <%= f.input :ohrmarke, label: "Ohrmarke(n)" %>
    <!-- ... -->
<% end %>

控制器创建:

  def create
    @ohrmarken = params[:cow][:ohrmarke].split("\r\n")
     @ohrmarken.each do |item|
       @cow = Cow.new(cow_params)
       @cow.save
     end
     # (...)
   end

对于我在文本框中输入的每个字符串,我想创建一头新牛。但是,'ohrmarke' 不是唯一的输入。如果是这样的话,我会在循环中输入 @cow = Cow.new(ohrmarke: item) 并且它会起作用。一头奶牛还有其他价值必须与单个项目一起保存。这就是为什么我使用 cow_params.

def cow_params
  params.require(:cow).permit(:ohrmarke, :hin, :weg, :stallnummer, :location_id)
end

如您所见,其他字段是 'hin'、'weg'、'stallnummer' 和 'location_id'。但是 'ohrmarke' 必须是项目的价值。但是我不能写 ohrmarke: item 因为我收到错误:

syntax error, unexpected ',', expecting =>

如果我插入像 ohrmarke: 'test' 这样的测试值,也会发生这种情况。如果我使用 :ohrmarke => 'test'.

错误仍然存​​在

您可以尝试这样的操作:

cow_params

中删除 ohrmarke
def cow_params
  params.require(:cow).permit(:hin, :weg, :stallnummer, :location_id)
end

在你的循环中尝试像这样设置 ohrmarke

@cow = Cow.new(cow_params)
@cow.ohrmarke = item
@cow.save