0

私は現在、ユーザーが「作品」と呼ばれるブログ投稿にコメントできるアプリを持っています。モデルの関係は次のとおりです。

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」が得られます。前に述べたように、データベースに保存されているコンテンツには実際に有効な値があります。表示されないのはなぜですか?なぜエラーが出ないのですか?

ありがとう!!

4

1 に答える 1