轨道上的红宝石 - 创建用于创建和更新模型的窗体



我正在创建一个表单,用户可以在其中输入他们最喜欢的食物。我希望表单既适用于现有的最喜欢的食物,也适用于新的最喜欢的食物。

我想我可以像这样切换为哪个对象创建表单:

<% if @user.favorite_food %>
  <%= form_for @user.favorite_food, :html => { class: :form } do |f| %>
<% else %>
  <%= form_for :favorite_food, :url => :favorite_food, :html => { class: :form } do |f| %>
<% end %>

但是我收到一个错误syntax error, unexpected keyword_else, expecting keyword_end.

我同意Mayank的评论,你的表格应该是这样的

<% if @user.favorite_food %>
  <%= form_for @user.favorite_food, :html => { class: :form } do |f| %>
  <% end %>
<% else %>
  <%= form_for :favorite_food, :url => :favorite_food, :html => { class: :form } do |f| %>
  <% end %>
<% end %>

您最好为此使用嵌套表单,并让UsersController负责更新:

<%= form_for @user, :html => { class: :form } do |f| %>
  <%= f.fields_for :favourite_food do |food_form| %>
    <% # your favorite_food inputs go here %>
  <% end %>
<% end %>

在你的User课上,你必须有accepts_nested_attributes_for

class User
  accepts_nested_attributes_for :favorite_food
  ...
end

在你的UserController你需要确保允许在你的强参数上favorite_food_attribures

params.require(:person).permit(favorite_food_attribures: []) #do not delete the existing parameters that are already there.

您可以查看此答案以获取更多信息。

希望这能帮助你。

最新更新