向用户添加爱好

时间:2011-01-03 05:45:01

标签: ruby-on-rails

我正在尝试编写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 但是,我的问题是用户对象尚未保存,因此无法访问特定的用户对象。我该如何解决这个问题?

2 个答案:

答案 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