Rails - 发布模型/用户关联视图返回用户对象

时间:2014-03-14 23:46:50

标签: ruby-on-rails rails-activerecord

在我的帖子索引视图中,它显示“#”作为用户,在尝试post.user.email时,它给我一个错误,当在单个视图页面上使用@ post.user.email但是它给了我正确的电子邮件。

我相信这意味着我的关联错了吗?

class Post < ActiveRecord::Base
  belongs_to :user
  acts_as_commentable


end

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable, :confirmable,
         :recoverable, :rememberable, :trackable, :validatable
  enum role: [:user, :vip, :admin]
  after_initialize :set_default_role, :if => :new_record?
  has_many :posts, autosave: true, dependent: :destroy

  def set_default_role
    self.role ||= :user
  end

end

t.references :user, index: true

最后一行代码就是我在迁移后使用的代码,我想那可能是我在哪里搞砸了?它应该是:user_id吗?

抱歉,忘了粘贴它显示的内容

 #<User:0x007fa7845b9310>

当它应该是一个电子邮件地址时它给我的是什么。

def index
  @posts = Post.all
end


<% @posts.each do |post| %>
      <tr>
        <td><%= post.user %></td>
        <td><%= post.title %></td>
        <td><%= post.content %></td>
        <td><%= post.subject %></td>
        <td><%= link_to 'Show', post %></td>
        <td><%= link_to 'Edit', edit_post_path(post) %></td>
        <td><%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>

1 个答案:

答案 0 :(得分:0)

<%= post.user %>只会输出user对象

如果你的桌子和关联设置正确,您需要专门调用用户详细信息,如下所示:

<%= post.user.created_at %>

由于您收到错误,因此您可能会遇到以下几个问题:

  
      
  1. 您的关联(&amp;架构)可能不正确
  2.   
  3. 您的User对象可能格式错误
  4.   
  5. 您的代码中的其他地方可能存在问题
  6.   

<强>调试

我强烈建议您在index视图中执行此操作:

<%= debug @post.user %>

这将输出整个user对象,您可以在其中识别它拥有的属性,从而可以更好地查看它返回的内容。之后,发布返回的数据&amp;我们会更好地帮助