我的项目有2个型号,公司和产品。公司拥有众多产品和产品属于公司。我想在公司展示页面上添加Product的新操作链接,并将company_id传递给Product new action,以便新产品自动属于它所链接的公司。
如何更改以下代码才能实现此目的? 我的环境是ruby 2.0.0和rails 4.0.2
show.html.erb(公司)
<%= 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.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)
我认为您的错误在于您在新操作中创建新产品的方式。目前它只将公司ID本身传递给构造函数,但是你并没有告诉我应该用它来设置属性。
如果您将其更改为@product = Product.new(company_id: params[:company_id])
,那么您的新产品对象应具有公司ID,并且应在创建表单中填写。然后,您可以使用隐藏字段,而不是省略字段。像这样,company_id没有额外的字段,但它仍然会自动添加到product_params中,而@product = Product.new(product_params)
将创建一个带有company_id的产品。