Rails 4应该在方法上设置实例变量或链吗?

时间:2016-03-31 03:04:37

标签: ruby-on-rails ruby-on-rails-4 dry

我在Rails 4上有一个非常简单的问题。

假设您有一个User模型has_one AccountAccount belongs_to User

在用户显示页面上,我想显示用户属性以及帐户属性。

在users_controller中,我可以这样做:

def show
  @user    = User.find(params[:id])
  @account = @user.account
end

然后在视图中:

<%= @user.name %> 
<%= @account.id %>

我可以设置用户实例变量:

def show
  @user = User.find(params[:id])
end

并在视图中:

<%= @user.name %>
<%= @user.account.id %>

这些有区别吗?其中一个是&#39; Rails Way&#39 ;?我可能在想这个,但我很好奇这里有什么是正确的。

2 个答案:

答案 0 :(得分:0)

我认为这确实是一个偏好问题。如果我是那个写它的人,我会将它分配给一个变量,如果它将在视图中多次使用。如果仅使用一次,则分配它似乎是多余的。

答案 1 :(得分:0)

建议的最佳做法是每个控制器操作限制一个实例变量,并且不允许@ person.account.id(链接)。

请参阅https://robots.thoughtbot.com/sandi-metz-rules-for-developers

使用装饰器是个好主意(例如Draper)。上面的例子太简单了,无法添加另一个gem。您可以在rails中使用delegate

请参阅http://apidock.com/rails/Module/delegate