0

我发现了一些关于此的帖子,但到目前为止,我尝试使用的所有内容都没有为我完成。我对 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
4

2 回答 2

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>
于 2013-02-23T11:37:32.667 回答
0

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

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

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

或者您可以简单地调用@item.user.email视图本身。

于 2013-02-23T03:37:07.060 回答