Rails使用belongs_to访问记录

时间:2013-03-22 21:27:51

标签: ruby-on-rails ruby-on-rails-3

我有一个用户模型has_many hacks和hack belongs_to user。 Hack有一个字段user_id。

我有一个带有主动作的static_pages_controller:

def home
  @hacks = Hack.all
  @users = User.all
end

用户模型是:

class User < ActiveRecord::Base
  attr_accessible :username, :email, :password, :password_confirmation
  has_secure_password

  has_many :hacks
end

黑客模型是:

class Hack < ActiveRecord::Base
  attr_accessible :hack_name, :serial_ids, :commentary

  has_many :hacktions, :dependent => :destroy
  has_many :serials, through: :hacktions
  belongs_to :user

  default_scope order: 'hacks.created_at DESC'

  extend FriendlyId
  friendly_id :hack_name, use: :slugged
end

在视图中,我想循环攻击黑客,然后识别与之关联的用户:

<% @hacks.each do |h| %>
  <span><%= @users.find(h.user_id).username %>
  <div class = "home-date"><%=  h.created_at.strftime("%B %m, %Y - %I:%M %p")  %><%=   image_tag("housing.png") %></div>
  <div class = "home-title"><%= link_to h.hack_name, hack_path(h) %></div>
  <div class = "commentary lead"><%= markdown(h.commentary) %></div>
<% end %>

我收到以下错误:

 undefined method `username' for #<Enumerator:0x007fd5078ac7b0> 

任何想法我在这里做错了。仅供参考:用户名是用户模型中的可访问字段。

2 个答案:

答案 0 :(得分:1)

尝试就first

的结果调用find
@user.find(h.serial_id).first.username

答案 1 :(得分:0)

尝试更改:

<span><%= @user.find(h.serial_id).username %>

<span><%= @user.find_by_serial_id(h.serial_id).username %>