我正在创建一个用户可以输入自己喜欢的食物的表单。我希望这个表格适用于现有的最喜欢的食物和新的食物。
我以为我可以像这样切换正在创建表单的对象:
<% 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
。
答案 0 :(得分:1)
我同意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 %>
答案 1 :(得分:0)
您最好使用嵌套表单,让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.
您可以查看this answer了解详情。
希望这可以帮到你。