在rails中显示关联数据(user_id,email等)

时间:2013-02-23 01:32:39

标签: ruby-on-rails ruby views models erb

我发现了一些关于此的帖子,但到目前为止,我尝试过的任何内容都没有为我做过。我仍然对rails很新鲜 - 我基本上对HTML和CSS很扎实,但是我参加了Skillshare Rails课程,我正在努力将它与Railstutorial书籍结合起来。所以请温柔。

我有一个基本的应用程序,用户可以创建“项目”。我使用脚手架来获取“物品”。它们也可能是微博。但是由于脚手架创建的视图,我想显示用户的电子邮件地址而不是电子邮件地址。我会在模型,视图和控制器中更改什么?这就是我所拥有的。

控制器:

def email
  @email = @item.user_id.email
end

视图:

<td><%= item.content %></td>
<td><%= @email %></td>
<td><%= link_to 'Show', item %></td>
<td><%= link_to 'Edit', edit_item_path(item) %></td>
<td><%= link_to 'Destroy', item, confirm: 'Are you sure?', method: :delete %></td>

项目模型:

class Item < ActiveRecord::Base
  attr_accessible :content, :user_id
  validates :content, :length => { :maximum => 140 }
  belongs_to :user
end

用户模型:

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable,
  # :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me
  has_many :items
end

2 个答案:

答案 0 :(得分:1)

有三种方法。

首先, 我觉得最好的方式。根据您的要求,简单授权。

class Item < ActiveRecord::Base
  attr_accessible :content, :user_id
  validates :content, :length => { :maximum => 140 }
  belongs_to :user

  delegate :email, to: :user
end

在视图中,

只需致电。

<td><%= item.email %></td>

喜欢@cluster说

你可以在控制器中使用

@email = @item.user.email

将代码移至项目模型

class Item < ActiveRecord::Base
  attr_accessible :content, :user_id
  validates :content, :length => { :maximum => 140 }
  belongs_to :user

  def user_email
    user.email
  end
end

在观看中,

<td><%= item.user_email %></td>

答案 1 :(得分:0)

在您的控制器中,您不希望添加其他方法,因为这些方法是用户应该能够通过URL访问的“操作”。 (例如,在过滤器之前,有些情况下,但这超出了范围)。

您可以在控制器操作中执行此操作

class ItemsController
  def show
    @item = Item.find params[:id]
    @email = @item.user.email
  end
end

或者您只需在视图中调用@item.user.email即可。