创建适用于创建和更新模型的表单

时间:2014-04-02 03:27:26

标签: ruby-on-rails ruby-on-rails-4

我正在创建一个用户可以输入自己喜欢的食物的表单。我希望这个表格适用于现有的最喜欢的食物和新的食物。

我以为我可以像这样切换正在创建表单的对象:

<% 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

2 个答案:

答案 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了解详情。

希望这可以帮到你。