私は2つのモデルを1つのフォームで提出しようとしています。 これらのコードを作成したにもかかわらず、フォームは「記事」レコードのみを作成します。 "ArticleHistory"レコードはこのフォームで作成する必要があります。しかし、現時点では、フォームはありません。2つのモデルで同時にレコードをサブミットする方法は?
誰かが私のコードに間違いを知っていますか?どうして?
ここは私の意見です(スリム)。
h2 It's new article
p test
= form_for @article do |f|
= f.fields_for :article_history do |af|
.field
= af.label :title
br
= af.text_field :title
.field
= af.label :content
br
= af.text_area :content
= af.hidden_field :id
.field
= f.hidden_field :status, :value => "publish"
= f.hidden_field :user_id, :value => current_user.id
= f.hidden_field :current_version, :value => 1
.actions
= f.submit 'submit'
また、私のモデルです。
class Article < ApplicationRecord
has_many :article_histories
accepts_nested_attributes_for :article_histories
end
class ArticleHistory < ApplicationRecord
belongs_to :article
end
ここにコントローラがあります。私は必要な部分だけを引用しました。
class ArticlesController < ApplicationController
def new
@article = Article.new
@article.article_histories.build
end
def create
@article = Article.new(article_params)
if @article.status == "publish"
@article.publish_datetime = Time.now.to_s(:db)
end
if params[:article][:back]
render :new
elsif @article.save
redirect_to @article, notice: 'Article was successfully created.'
else
render :new
end
end
private
def article_params
params.require(:article).permit(:current_version , :status , :user_id , article_histories_attributes:[:id, :article_id, :version, :title, :content])
end
end
これはバージョン情報です。
$ bin/rails -v
Rails 5.0.1
$ ruby -v
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin14]
ありがとうございます!あなたのelsif @article.save
あなたが
ArticleHistory.create(article_params)
またはそれらが関連付けられているので、その後、あなたは、単純なコール( "article_histories" についてのイム完全にわからないことができますを呼び出すことができます内側
[ActiveRecordのエラー]
Started POST "/articles" for ::1 at 2017-01-13 12:10:35 +0900
Processing by ArticlesController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"ZUMBqozYl4vWNxImgz8ghY7gGb2NPp4qMnXYulqkoPAMTWueIN8xAITCo7NSDP/rDgJQOLNOEqLwUcy3kl4BTQ==", "article"=>{"article_history"=>{"title"=>"title1210", "content"=>"content1210", "id"=>""}, "status"=>"publish", "user_id"=>"9", "current_version"=>"1"}, "commit"=>"確認"}
User Load (0.8ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 9 ORDER BY `users`.`id` ASC LIMIT 1
Unpermitted parameter: article_history
(0.6ms) BEGIN
SQL (0.7ms) INSERT INTO `articles` (`current_version`, `status`, `publish_datetime`, `user_id`, `created_at`, `updated_at`) VALUES (1, 'publish', '2017-01-13 03:10:43', 9, '2017-01-13 03:11:05', '2017-01-13 03:11:05')
(2.3ms) COMMIT
ここで設定した[ネストされた属性](http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html)でこれを分解しますが、 'article_params 'メソッドを呼び出すことができます。あなたはそれを正しく受け入れていますか?そうでなければ無視されるかもしれません。 – tadman
@tadman申し訳ありませんが、私はほとんど忘れました。上記のコードを追加します。それを調べることができますか? –
モデルやネストされたモデルが検証に失敗した場合には 'save!'を呼び出すことができます。その場合は 'rescue ActiveRecord :: RecordInvalid'を呼び出すことができます。例外は無視しにくい。実際にレコードを作成しようとしている 'log/development.log'もチェックしてください。 – tadman