2013-12-22 186 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

相關問題