2013-12-22 138 views
0

我有一个用户,而且用has_and_belongs_to_many关系链接的项目模型(每个用户可以是几个项目的一部分,他们可以是几种创建者项目)。我想创建一个表单来将用户添加到项目中。用户需要输入另一个用户的用户名来添加他。我怎样才能做到这一点?Rails的:如何创建一个表单来创建一个新的has_many关系

这里是我试过:

<%= form_for(@project) do |f| %> 
    <%= f.label :username, "Username" %> 
    <%= f.text_field :users %> 
    <%= f.submit "Add" %> 
<% end %> 

然后在控制器中我会做这样的事情:

def add_user 
    @project = Project.find(params[:id]) 
    user = User.find_by(username: params[:username]) 
    user.projects << @project 
    user.save 
    redirect_to @project 
    end 

的问题是,用户的文本字段不会做我认为它会输出@project.users检查(#<ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_User:0x007fc3e98e8d70>)。

我已经看到了嵌套形式,但我不认为作为用户和项目已创建它的合适。我使用的铁轨4

+0

看不清,它正在做什么,它不是你以为会是什么。 PS除非你对用户名有唯一性限制,否则你是通过不选择用户来要求它的。也给你的问题,我会期望两个用户。要添加的用户和'授权' –

+0

@TonyHopkinson我已编辑'用户'字段的问题。是的,用户名有一个唯一性约束,并且场景中有两个用户。作为项目一部分的用户通过输入他的用户名添加另一个。 – romainberger

+0

你想要的text_field是什么:用户要做什么?显示用户列表,或只是一个文本字段,他们可以输入名称?认为你真正的问题是在显示表单的控制器中。 –

回答

0

看看茧宝石。它提供了一些嵌套形式的东西,很难用货架功能的导轨来解决。我已经用它最近做的非常类似的东西(查找或在M2M关系创建)

https://github.com/nathanvda/cocoon

1

嵌套形式的东西不只是创造新的记录,你可以用它来添加加盟模式,太

我想看看accepts_nested_attributes_for


接受嵌套属性

我会亲自试试这个:

#app/controllers/projects_controller.rb 
def new 
     @project = Project.new 
     @project.projects_users.build 
end 

def create 
     @project = Project.new(project_params) 
     @project.save 
end 

def edit 
     @project = Project.find(params[:id]) 
end 

def update 
    @project = Project.find(params[:id]) 
    @project.save 
end 

private 
def project_params 
    params.require(:project).permit(:project, :params, projects_users_attributes: [:user_id]) 
end 

#app/models/project.rb 
Class Project < ActiveRecord::Base 
    accepts_nested_attributes_for :projects_users 
end 

#app/views/projects/edit.html.erb 
<%= form_for(@project) do |f| %> 
    <%= f.fields_for :projects_users %> 
     <%= f.label :username, "User ID" %> 
     <%= f.text_field :user_id %> #-> can change to <select> later 
    <% end %> 
    <%= f.submit "Add" %> 
<% end %> 
+0

试图让这个工作,但没有机会的一部分呢。即使表存在,这也给了我错误'没有找到名为'projects_users'的关联。我必须使用'has_many:through'关系而不是'has_and_belongs_to_many'吗? – romainberger

相关问题