rails为模型“友谊”创建控制器

时间:2013-05-10 19:21:30

标签: ruby-on-rails

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

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

2 个答案:

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