0

我想在两个模型之间建立“关系”。我有模型用户、模型 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

显然这里出了点问题,我不明白是什么。

4

2 回答 2

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
于 2013-05-10T20:47:12.577 回答
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
于 2013-06-05T09:30:51.677 回答