2014-01-09 92 views
0

目前我有三個模型,一個用戶,has_many Projects和Projects has_many Parts。我目前正在用戶和零件之間建立關係模型(Part_Item)。Form_for構建多個關係

簡化模型:

class User 
    has_many :projects 
    has_many :part_items 
end 

class Project 
    belongs_to :user 
    has_many :parts, dependent: :destroy 
    accepts_nested_attributes_for :parts, :reject_if => lambda { |a| a[:name].blank? }, allow_destroy: true 
end 

class Part 
    belongs_to :project 
    has_many :part_items 
end 

class PartItem 
    belongs_to :user 
    belongs_to :part 
end 

在項目頁面的用戶將能夠推我做到了按鈕,將創建用戶和零件之間的關係。這是一個用戶可以看到他已經使用了哪些部分。如果有隻是其中的一部分,我可以寫:

<%= form_for(current_user.part_items.build(part_id: @part.id), remote: true) do |f| %> 
    <div><%= f.hidden_field :part_id %></div> 
    <%= f.submit "I Made It", class: "btn btn-small btn-primary" %> 
<% end %> 

這並不爲許多部分,這是該項目的一個嵌套的屬性工作。

問題: 1.如何獲得只是在形式部分項目的哈希?我試過了:

<%= @project.parts.each do |part| %> 
    <div><%= hidden_field_tag :part_id, part.id %></div> 
<% end %> 

但是這隻抓取最後一個part_id。

2.我應該在我的PartItem控制器中創建一個創建方法嗎?任何意見/方向,我應該如何在PartItem控制器中設置我的行爲,將不勝感激。目前我只有:

def create 
    @part = Part.find(params[:part_id]) 
    current_user.save_part!(@part) 
    redirect_to root_url 
end 

這適用於保存一個零件,但不適用於保存多個零件。

+0

更新爲<%= f.hidden_​​field:part_id,part.id%> –

+0

如果您的應用程序處於實時模式,請爲此提供網址,以便知道您真正想要做什麼 –

+0

@NitinJ已更新它到<%= hidden_​​field_tag:part_id,part.id%> f.hidden_​​field給出錯誤。這隻抓取最後的part_id。它不是在現場模式,基本上我有一個項目與部分作爲嵌套屬性。我想收集表單中的part_ids並提交給PartItem控制器,這樣我就可以在用戶和零件之間建立關係。 – ChrisBarthol

回答

0

原來我正在考慮這一切都是錯誤的,晚上睡得很好,清理了一切。

我想要一個按鈕,通過項目頁面上的按鈕在用戶和零件之間建立關係。我的第一個想法是製作一個表單,將所有part.id收集到一個散列表中,並將其提交給控制器,在這裏我將它們分開,並保存關係。

我的解決方案:

的部分是該項目的一個嵌套的屬性。因此,我做了一個表單,將project.id提交給控制器。然後我可以從嵌套的屬性關係中獲取所有的部分並創建新的關係。所以,現在我的形式看起來是這樣的:

<%= form_for([current_user.part_items.build]) do |f| %> 
    <div><%= hidden_field_tag :project_id, @project.id %></div> 
    <%= f.submit "I Made This!", class: "btn btn-large btn-primary" %> 
<% end %> 

而且控制器創建操作是這樣的:

def create 
    @project = Project.find(params[:project_id]) 
    @project.parts.each do |part| 
     @part = part.id 
     current_user.save_part!(part) 
    end 

end 

而現在一切工作。