2014-01-09 3 views
0

현재 저는 has_many Projects 및 has_many Projects라는 세 가지 모델을 가지고 있습니다. 저는 현재 사용자와 파트 사이에 관계 모델 (Part_Item)을 구축 중입니다.Form_for 복수 관계 구축

간체 모델 : 사용자가 사용자 및 부품 사이의 관계를 생성하는 I 제작이 버튼을 누를 수있을 것 프로젝트 페이지에서

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 컨트롤러에 create 메소드가 있습니까? 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

나는이 모든 잘못된 길을 생각하고 있었다. 그리고 좋은 밤 잠은 모든 것을 깨끗하게했다.

프로젝트 페이지의 버튼을 통해 사용자와 파트 간의 관계를 만드는 버튼이 필요했습니다. 내 첫 번째 생각은 모든 부분을 수집하는 양식을 만드는 것이 었습니다. 해시로 그것을 제출하고 내가 그들을 분리하고 개인 관계를 저장 컨트롤러에 제출.

내 솔루션 :

부품 프로젝트의 중첩 된 속성입니다. 그래서 대신 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 

그리고 모든 것이 작동합니다.