私は現在、ユーザーが「作品」と呼ばれるブログ投稿にコメントできるアプリを持っています。モデルの関係は次のとおりです。
class User < ActiveRecord::Base
has_many :works
has_many :comments
class Work < ActiveRecord::Base
belongs_to :user
has_many :comments
class Comment < ActiveRecord::Base
belongs_to :user
belongs_to :post
belongs_to :work
Works show ページには、ユーザーがコメントを投稿できるフォームがあります。
<%= form_for([@work, @comment]) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<div class="field">
<%= f.text_area :content, placeholder: "Post feedback or contribute content
to this work!" %>
</div>
<%= f.submit "Post", class: "btn btn-small btn-primary" %>
<% end %>
コメント フォームは Works ページにあるため、Works コントローラーにはコメント用の次のビルド ロジックがあります。
def show
@work = Work.find(params[:id])
@comment = @work.comments.build
@comment.user = current_user
@activities = PublicActivity::Activity.order("created_at DESC").where(trackable_type: "Work", trackable_id: @work).all
@comments = @work.comments.order("created_at DESC").where(work_id: @work).all
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @work }
end
end
次に、コメント コントローラーがコメントを作成します。
def create
@work = Work.find(params[:work_id])
@comment = @work.comments.build(params[:comment])
@comment.user = current_user
if @comment.save
#flash[:success] = "Post created!"
redirect_to @work
else
render 'home#index'
end
end
私の問題は、データベースにコンテンツ値があるにもかかわらず、Works ショー ページにコメントを送信したユーザーの名前が表示されるのに、何らかの理由で「コンテンツ」フィールドの値が表示されないことです。エラーメッセージは表示されません。コンテンツテキストがあるべき場所に空のボックスを取得するだけです。
これは、コンテンツを表示する Works show ページです (html 形式を除いたもの):
<% @comments.each do |comment| %>
<%= image_tag @comment.user.photo.url(:avatar) %> <%= link_to @comment.user.full_name, @comment.user if @comment.user %>
<%= @comment.content %>
<% end %>
@comment.content を @comment.work_id のようなものに置き換えると、Web ページに表示する数字「1」が得られます。前に述べたように、データベースに保存されているコンテンツには実際に有効な値があります。表示されないのはなぜですか?なぜエラーが出ないのですか?
ありがとう!!