Meine Modelle sind wie folgt;Rails: So speichern Sie die übergeordneten Daten im untergeordneten Modell (Zuordnung)
Modelle
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
Wie kann ich abrufen und speichern Sie die shop_id
im Item
wenn ich item
Daten speichern?
Obwohl ich denke, so etwas wie @item.shop
funktioniert, weiß ich nicht, wie man es anwendet.
Schema
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
views/Artikel/new.html.erb
<%= form_for(@item) do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<br>
<%= f.submit "Post" %>
<% end %>
Es wäre schön, wenn Sie mir einen Vorschlag machen könnten.
Vielen Dank für Ihre schnelle Antwort, @Emu. Obwohl es funktioniert, wenn ich die URL direkt nach dem Hinzufügen Ihrer Antwort in der 'routes.rb' eingegeben habe, wurde der folgende Fehler angezeigt, als ich <% = link_to" Ereignis hinzufügen ", new_shop_item_path%>' in der 'shop.html hinzufügte .erb'. Der Fehler ist 'ActionController :: UrlGenerationError in ShopsController # show' und' No route matches {: action => "new",: controller => "items",: id => "23"} fehlende Schlüssel: [: shop_id ] '. – SamuraiBlue
Es funktioniert nach der Bearbeitung wie folgt, @Emu. Vielen Dank für Ihre Zeit. '<% = link_to" Artikel hinzufügen ", new_shop_item_path (shop)'. – SamuraiBlue
@SamuraiBlue, Sie sind herzlich willkommen. :) – Emu