Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 传递父模型';s id到child';新的并在rails上创建操作_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby 传递父模型';s id到child';新的并在rails上创建操作

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 我认为你的错误在于你在新行动中创造新产

我的项目有两个模型,公司和产品。公司拥有多个产品,产品属于本公司。我想在公司展示页面上放置一个指向产品新操作的链接,并将公司id传递给产品新操作,以便新产品自动属于其链接的公司

我应该如何更改以下代码以实现此目的? 我的环境是ruby 2.0.0和rails 4.0.2

show.html.erb(公司)

new.html.erb(产品)

也显示在调试日志中

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