私は 'accepts_nested_attributes'の逆をしています。私は 'children_controller#create'から親インスタンスを作成したいと思います。たぶんあなたはいくつかのアドバイスをするか、そうすることは関係ないと私に説明します。私はすべてのコメントに開いています!Rails - 子フォームから親インスタンスを作成する
私はクライアントモデルがあります:私は反応するレールを宝石を使用していますし、/magazines
に私は新しい雑誌を作成するためのフォームを持っている
class Magazine < ActiveRecord::Base
belongs_to :client
validates :client, :launch_date, presence: true
# accepts_nested_attributes_for :client
end
:
class Client < ActiveRecord::Base
has_one :magazine
validates :name, presence: true, uniqueness: true
end
や雑誌のモデルをクライアント名を与えるためのテキストフィールド。
PG::ForeignKeyViolation - ERROR: insert or update on table "magazines" violates foreign key constraint "fk_rails_cd907cfe6d"
DETAIL: Key (client_id)=(51) is not present in table "clients".
クライアントがデータベースに保存されていなかったかのように:私のmagazines_controller.rb
で
は、私はいつもPG ::エラーになってしまい、次の
def create
@client = Client.find_by_name(magazine_params[:client_id])
@selected_magazine = Magazine.new(magazine_params)
authorize @selected_magazine
if @client
@selected_magazine.client = @client
else
@client = Client.new(name: magazine_params[:client_id])
@client.save
@selected_magazine.client = @client
end
# @client = Client.where(name: magazine_params[:client_id]).first_or_create
# @selected_magazine.client = @client if @selected_magazine.client_id.to_i == 0
@title = magazine_params[:title]
@selected_issue = nil
@issues = nil
@selected_magazine.save
binding.pry
@magazines = policy_scope(Magazine)
end
def magazine_params
magazine_params = params.require(:magazine).permit(:title, :analytics_id, :launch_date, :client_id)
# if @client
# params[:magazine][:client_id] = @client.id
# magazine_params.merge!(params[:magazine])
# end
return magazine_params
end
を置きます。私がbinding.pry
になり、Client.all
after @client.save
と呼ぶと、私の新しいクライアントは返されません。
他のプロジェクトでも同様の問題があったので、うまくいきましたので少し驚きました。あなたの情報のために:
# Previous Project
# Gemfile.lock
pg (0.18.3)
rails (4.2.0)
#Current Project
# Gemfile.lock
pg (0.18.4)
rails (4.2.5.1)
あなたの助けを前もってありがとう。 children_controllerの子の前に親インスタンスを作成するためのアドバイスがあれば、本当に興味があります。
PS1:コントローラでは、最初にコメントを付けてみましたが、作成すると出力は変わりません。 PS2:Gemfileに関する詳細情報が必要な場合は教えてください。
実際の実装についてこれを参照できますかネストされた属性を受け入れることのできるイオン。 https://www.sitepoint.com/complex-rails-forms-with-nested-attributes/ –
まず、 'Client'のインスタンスを取得し、古い構文' Clientを使用しないでください。 'Client.where(名前:magazine_params [:client_id])。最初! ' 第2に、' Client'インスタンスが保存されていることを確認してから ' @ client.save! 'と入力します。 – BitOfUniverse
@VaibhavDhoke、私は親から子になるネストされた属性の逆をしようとしている[リンク(http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html)。私があなたの例を挙げるなら、1対1の関連付けをしてアドレス帳からユーザーを作成したいと思います。 – MaxDpt