Rails对象值不会显示在视图页面上。没有错误

时间:2013-04-23 02:54:01

标签: ruby-on-rails

我目前有一个应用程序,允许用户评论一个名为“工作”的博客文章。以下是模型关系:

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 show页面将显示提交评论的用户名,但由于某种原因它不会显示“content”字段的值,即使数据库中有内容值!我没有收到任何错误消息。我只是得到一个空框,内容文本应该是。

这是显示内容的Works显示页面(减去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.work_id替换@ comment.content,我会在网页上显示数字“1”。正如我之前提到的,存储在数据库中的内容确实存在有效值。为什么不显示?为什么没有错误?

谢谢!

1 个答案:

答案 0 :(得分:1)

在您的视图代码中,您正在迭代@comments并将每个文件存储为comment(注意缺少@) - 然后在循环中您指的是{{1}这完全可能是其他东西。

@comment更改为@comment