RailsでForeginキーが更新されないという問題があります。
3つのモデルのアプリケーションがあります。
ユーザー、レビュー、コメント。
ユーザーには多くのレビューがあり、レビューには多くのコメントがあります。新しいコメントを追加するときに、User_idとReview_idをコメントテーブルに追加します。
コメントはフォームから渡されます。次のステートメントでuser_idを更新します
@comment = current_user.comments.build(params[:comment]) in the comment controller
foreginキーであるreviews_idを除いて、すべてがコメントテーブルに組み込まれます。これは、モデル内の関連付けによって自動的に行われることを理解していました。これは当てはまらないのでしょうか、それともモデルに何かが欠けているのでしょうか。
ユーザーモデル
class User < ActiveRecord::Base
attr_accessible :email, :name, :password, :password_confirmation
has_secure_password
has_many :microposts, dependent: :destroy
has_many :reviews, dependent: :destroy
has_many :comments, dependent: :destroy
end
レビューモデル
class Review < ActiveRecord::Base
attr_accessible :review_text, :tumb_up_down, :rating, :name
belongs_to :user
has_many :comments, dependent: :destroy
コメントモデル
class Comment < ActiveRecord::Base
attr_accessible :comments, :review_id, :user_id
belongs_to :reviews
コメントコントローラーコード
def create
@comment = current_user.comments.build(params[:comment])
if @comment.save
redirect_to 'static_pages/home' #{:action => 'show', :id }
else
redirect_to 'static_pages/home'
end
終わり
そして最後に、値を渡すフォーム。これにreview_idを含める必要があります。
<div class="field">
<%= form_for(@comment) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.label :comments %>
<%= f.text_area :comments, placeholder: "Add your words of wisdom" %>
</div>
<%= f.submit "Add", class: "btn btn-large btn-primary" %>
<% end %>