Rails:如何将父数据存储在子模型中(关联)

时间:2016-06-17 05:54:30

标签: ruby-on-rails ruby-on-rails-4

我的模型如下;

模型

shop.rb

class Shop < ActiveRecord::Base
    belongs_to :order
    has_many :items
    has_many :categories
end

item.rb的

class Item < ActiveRecord::Base
    belongs_to :shop
    has_many :categories
end

如何保存shop_id数据时如何在Item中检索并存储item

虽然我觉得像@item.shop这样的东西有用,但我不知道如何应用它。

模式

ActiveRecord::Schema.define(version: 20160615060137) do

...

  create_table "shops", force: :cascade do |t|
    t.string   "name"
    t.integer  "order_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  create_table "items", force: :cascade do |t|
    t.string   "name"
    t.integer  "shop_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

...

end

items_controller.rb

class ItemsController < ApplicationController

  def new
    @item = Item.new
  end

  def create
    @item = Item.new(item_params)
    if @item.save
      flash[:success] = "item created!"
      redirect_to root_url
    else
      render 'new'
    end
  end

  private

    def item_params
      params.require(:item).permit(:name, :shop_id)
    end

end

视图/项目/ new.html.erb

<%= form_for(@item) do |f| %>
    <%= f.label :name %>
    <%= f.text_field :name %>
    <br>
    <%= f.submit "Post" %>
<% end %>

如果你能给我任何建议,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

你可以用3种方式做到这一点,

Dirty:hidden_field中添加名为shop_id的{​​{1}},并将hidden_​​field分配给您的值。

最佳:创建嵌套对象。在路径文件中执行:

item/_form

它会生成resources :shops do resources :items end 项目路径,如new。这样你就可以获得root_url/shops/1/items/new

您可shop_id create项目对象与new类似:

shop