我是Rails的新手,我一直试图以各种方式扩展Michael Hartl的教程。其中之一是使用has_many:through关联来模拟用户兴趣。我设置了以下模型:
class Interest < ActiveRecord::Base
has_many :user_interests, dependent: :destroy
has_many :users, through: :user_interests
end
class User < ActiveRecord::Base
has_many :user_interests, dependent: :destroy
has_many :interests, through: :user_interests
end
class UserInterest < ActiveRecord::Base
belongs_to :user
belongs_to :interest
end
我的user_interests控制器:
def index
end
def create
@user_interest = current_user.user_interests.build(params[:interest_ids])
if @user_interest.save
redirect_to current_user
flash[:success] = "Interests updated!"
else
render 'index'
end
end
def destroy
@user_interest = UserInterest.find(params[:user_id][:interest_ids])
current_user.user_interests(@user_interest).destroy
end
观点:
<%= form_for(current_user.user_interests.build(params[:interest_ids])) do |f| %>
<%= hidden_field_tag "user[interest_ids][]", nil %>
<% Interest.all.each do |interest| %>
<%= check_box_tag "user[interest_ids][]", interest.id, current_user.interest_ids.include?(interest.id), id: dom_id(interest) %>
<%= label_tag dom_id(interest), interest.activity %><br>
<% end %>
<%= f.submit "Update interests", class: "btn btn-large btn-primary" %>
<% end %>
当我运行应用程序时,我可以选中一个复选框并单击提交按钮,但只有用户ID保存在user_interests表中。所以它看起来像:
id integer user_id interest_id created_at_timestamp updated_at_timestamp
1 2155 2014-04-06 ect... 2014-04-06 ect...
起初我试图使用用户控制器来创建关联,但这导致了问题,因为我没有在用户#edit动作上显示兴趣复选框,我希望他们拥有自己的页面。我需要做些什么来将兴趣ID与用户ID一起保存到user_interests表?
答案 0 :(得分:0)
请尝试使用以下代码。
def create
interests = Interest.where(id: params[:user][:interest_ids])
current_user.interests.push(interests)
flash[:success] = "Interests updated!"
redirect_to current_user
end