我想在两个模特之间建立“关系”。我有模型用户,模型Prog,模型关系。我把它们与has_many绑在一起:通过关系。
我想让button_to将Prog添加到用户。我停在了关系控制器创建。我使用构建方法吗?
<%= link_to "+ Add Programme", :controller => "relationships", :action => "create", :method => "post", :id => @prog.id %>
def create
@relationship = @user.relationships.build(params[:relationship])
if @relationship.save
redirect_to user_url
end
end
显然这里出了点问题,我不明白是什么。
答案 0 :(得分:0)
你可以这样做:
def create
@prog = Prog.find(params[:id])
current_user.progs << @prog
redirect_to user_url
end
但是,如果关系没有任何视图,并且您只使用它来创建用户之间的关系,那么请考虑将此操作移动到用户或prog控制器。也许只是对用户使用更新操作。我更好的解决方案是这样的:
# in user show.html.erb or wherever you want it
<%= form_for @user do |f|
<%= f.hidden_field "prog_ids[]", @prog.id %>
<%= f.submit %>
<% end %>
# In user controller
def update
@user = User.find(params[:id])
if @user.update_attributes(params[:user])
redirect_to user_url(@user)
end
end
答案 1 :(得分:0)
要了解如何建立关联的关系,您需要传递@ user.id。在你的button_to传递第二个ID,如:
<% @prog.users.each do |user| %>
<%= button_to "+ Add Programme", :controller => "relationships", :action => "create", :method => "post", prog_id: @prog.id, user_id: user.id %>
<% end %>
并在创建动作
def create
@user = params[user_id]
@relationship = @user.relationships.build(params[:relationship])
if @relationship.save
....
end