【问题标题】:Rails - Post model/User association view returning user objectRails - 发布模型/用户关联视图返回用户对象
【发布时间】:2014-03-14 23:46:49
【问题描述】:

在我的帖子索引视图中,它显示“#”作为用户,当尝试 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 %>

【问题讨论】:

  • 您能否为索引操作代码添加您的帖子控制器。如果您尝试在视图页面中引用变量,它们需要以“@”开头。这样的“@”开始变量在控制器中定义并且可供视图访问。因此,如果您在控制器中定义@post,它将可以在视图中访问,但如果您只定义post,它将只能在控制器中访问,而不能在视图中访问。
  • @steve 我添加了 post#index 和视图 sn-p。
  • #&lt;User:0x007fa7845b9310&gt; 是用户对象的样子。因此,如果post.user 返回#&lt;User:0x007fa7845b9310&gt;,那么您就知道该帖子属于某个用户,这很好。当您尝试&lt;td&gt;&lt;%= post.user.email %&gt;&lt;/td&gt; in that each` 块时,您得到的确切错误是什么?
  • 一个问题是每次页面刷新时数字都会发生变化,这并不好...posts#show 确实显示了正确的关联并允许我调用 post.user.email
  • 您是否收到类似“Nil 类的未定义方法电子邮件”之类的错误?

标签: ruby-on-rails rails-activerecord


【解决方案1】:

&lt;%= post.user %&gt; 只会输出user 对象

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

<%= post.user.created_at %>

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

  1. 您的关联(和架构)可能不正确
  2. 您的 User 对象可能格式不正确
  3. 您的代码中的其他地方可能存在问题

调试

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

<%= debug @post.user %>

这将输出整个user 对象,您可以在其中识别它的属性,从而更好地了解它返回的内容。之后,发布返回的数据,我们将能够更好地提供帮助

【讨论】:

  • 谢谢,如果其他人有类似的问题,我在上面的评论者史蒂夫的帮助下找到了解决方案。我有一篇没有关联用户的帖子,这导致 nilClass 成为问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
相关资源
最近更新 更多