Ruby 传递父模型';s id到child';新的并在rails上创建操作
我的项目有两个模型,公司和产品。公司拥有多个产品,产品属于本公司。我想在公司展示页面上放置一个指向产品新操作的链接,并将公司id传递给产品新操作,以便新产品自动属于其链接的公司 我应该如何更改以下代码以实现此目的? 我的环境是ruby 2.0.0和rails 4.0.2 show.html.erb(公司) new.html.erb(产品) 也显示在调试日志中Ruby 传递父模型';s id到child';新的并在rails上创建操作,ruby,ruby-on-rails-4,Ruby,Ruby On Rails 4,我的项目有两个模型,公司和产品。公司拥有多个产品,产品属于本公司。我想在公司展示页面上放置一个指向产品新操作的链接,并将公司id传递给产品新操作,以便新产品自动属于其链接的公司 我应该如何更改以下代码以实现此目的? 我的环境是ruby 2.0.0和rails 4.0.2 show.html.erb(公司) new.html.erb(产品) 也显示在调试日志中 company_id: '6' action: new controller: products 我认为你的错误在于你在新行动中创造新产
company_id: '6'
action: new
controller: products
我认为你的错误在于你在新行动中创造新产品的方式。目前,它只将公司id本身传递给构造函数,但您并没有告诉rails应该使用它设置哪个属性
如果将其更改为
@product=product.new(company\u id:params[:company\u id])
,则新产品对象应具有company id,并应在创建表单中填写。然后,您可以使用隐藏字段,而不是省略字段。这样,公司id没有额外的字段,但它仍然会自动添加到产品参数和@product=product。新建(产品参数)
将创建一个具有公司id的产品。我们缺少1)错误输出2)参数输出3)模型4)HTML表单输出策略,因为没有解释。它不会产生错误,但在创建新产品时,:company_id为空,因此不属于该公司。产品的创建操作应自动继承从公司页面传递的:company\u id,以便用户不必输入:company\u id。使用当前代码,产品已成功创建,但缺少:company\u id。
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
<% 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>
http://localhost:3000/products/new?company_id=6
company_id: '6'
action: new
controller: products