【发布时间】: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。
-
#<User:0x007fa7845b9310>是用户对象的样子。因此,如果post.user返回#<User:0x007fa7845b9310>,那么您就知道该帖子属于某个用户,这很好。当您尝试<td><%= post.user.email %></td> in thateach` 块时,您得到的确切错误是什么? -
一个问题是每次页面刷新时数字都会发生变化,这并不好...posts#show 确实显示了正确的关联并允许我调用 post.user.email
-
您是否收到类似“Nil 类的未定义方法电子邮件”之类的错误?
标签: ruby-on-rails rails-activerecord