我发现了一些关于此的帖子,但到目前为止,我尝试过的任何内容都没有为我做过。我仍然对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
答案 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
即可。