2014-12-17 1 views
0

내 프로젝트에는 회사 및 제품이라는 두 가지 모델이 있습니다. 회사는 많은 제품과 제품이 회사에 속합니다. Company Show 페이지에 Product의 새 작업에 대한 링크를 추가하고 company_id를 Product new action에 전달하여 새 제품이 링크 된 회사에 자동으로 속하도록하고 싶습니다.부모 모델의 ID를 자식의 새 모델에 전달하고 레일에 작업 만들기

이렇게하려면 코드 아래에서 어떻게 변경해야합니까? 내 환경

<%= link_to "Add new product", new_product_path(company_id: @company) %> 

products_controller.rb

def new 
@product = Product.new(params[:company_id]) 
end 

def create 
    @product = Product.new(product_params, params[:company_id]) 
    if @product.save 
     flash[:success] = "Product successfully created." 
     redirect_to @product 
    else 
     render 'new' 
    end 
end 

new.html 4.0.2

show.html.erb (회사) 루비 2.0.0과 레일 .erb (제품)

<% provide(:title, 'New product') %> 
<h1>Add a new product</h1> 

<div class="row"> 
    <div class="span6 offset3"> 
     <%= form_for(@product) do |f| %> 
      <%= render 'shared/error_messages', object: f.object %> 

      <%= f.label :name, "Product Name" %> 
      <%= f.text_field :name %> 

      <%= f.label :description, "Description" %> 
      <%= f.text_area :description %> 

      <%= f.label :type, "Product Type" %> 
      <%= f.text_field :type %> 

      <%= f.label :released_date, "Released Date" %> 
      <%= f.date_field :released_date %> 

      #I want to omit below 2 lines by passing company_id from company show action 
      <%= f.label :company_id, "Company ID" %> 
      <%= f.text_field :company_id %> 

      <%= f.submit "Submit", class: "btn btn-large btn-primary" %> 

     <% end %> 
    </div> 
</div> 

: comapny_id가 URL에 표시된대로 새로운 제품 조치로 전달됩니다.

http://localhost:3000/products/new?company_id=6 

디버그 로그에도 표시됩니다.

company_id: '6' 
action: new 
controller: products 
+0

무엇이 작동하지 않습니까? –

+0

우리는 1) 오류 출력 2) params 출력 3) 모델 4) HTML 양식 출력 – JakeTheSnake

+0

설명의 부족에 사과. 오류는 발생하지 않지만 새 제품을 만들면 : company_id는 비어있어 회사에 속하지 않습니다. 제품의 작성 조치는 회사 페이지에서 전달 된 company_id를 자동으로 상속해야 사용자가 company_id를 입력 할 필요가 없습니다. 현재 코드를 사용하면 제품이 성공적으로 생성되었지만 누락되었습니다 : company_id. – Kentwoo

답변

0

나는 당신이 새로운 행동으로 새로운 제품을 만드는 방법에 있다고 생각합니다. 현재는 회사 ID 자체 만 생성자에게 전달되지만 속성을 설정해야하는 레일은 표시하지 않습니다.

@product = Product.new(company_id: params[:company_id])으로 변경하면 새 제품 개체에 회사 ID가 있어야하며 양식을 작성해야합니다. 그런 다음 필드를 생략하는 대신 숨겨진 필드를 사용할 수 있습니다. 이처럼 company_id에 대한 추가 필드는 없지만 product_params에 자동으로 추가되고 @product = Product.new(product_params)은 company_id가있는 제품을 생성합니다.

+0

감사합니다 irruputuncu! 당신의 대답이 내 문제를 완벽하게 해결했습니다! – Kentwoo

관련 문제