我正在尝试编写rails应用程序。我是一个ruby-on-rails新手。 我有一个用户模型和一个爱好模型。
class User < ActiveRecord::Base
has_many :hobbies
end
class Hobby < ActiveRecord::Base
belongs_to :user
end
在新用户注册期间,我使用了一个文本框,我输入了一个爱好值。然后,当我按下“添加爱好”按钮时,将调用UsersController add_hobby 中的方法,我打算将用户为业余爱好输入的值附加到用户,即
@user.hobbies << hobby
但是,我的问题是用户对象尚未保存,因此无法访问特定的用户对象。我该如何解决这个问题?
答案 0 :(得分:4)
您可以在模板中构建嵌套表单:
<%= form_for @user do |user_form| %>
<%= user_form.text_field :name %>
<% for hobby in @user.hobbies %>
<%= user_form.fields_for hobby, :index => hobby do |hobby_form|%>
<%= hobby_form.text_field :name %>
<% end %>
<% end %>
<% end %>
然后在您的用户模型中添加accepts_nested_attributes_for
class User < ActiveRecord::Base
has_many :hobbies
accepts_nested_attributes_for :hobbies, :allow_destroy => true
end
答案 1 :(得分:1)
根据我的理解,最好在用户创建后保存爱好。即使没有用户创建,毕竟保存用户的爱好也不合逻辑。
如果您允许用户拥有多个爱好,请在客户端使用javascript数组。当用户添加了一个爱好时,将其添加到javascript数组并更新页面。 (您可以使用一些DHTML / Javascript)。当您保存用户传递爱好阵列并在控制器中时,您可以拆分并保存爱好。
欢呼声
sameera