【问题标题】:Rails 4 should I set the instance variables or chain on the methods?Rails 4 我应该在方法上设置实例变量还是链?
【发布时间】:2023-03-22 08:05:01
【问题描述】:

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

假设你有一个User 模型,其中has_one Account 和Account 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 %>

这些有区别吗?其中之一是“Rails Way”吗?我可能想太多了,但我只是好奇这里什么是正确的。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      见https://robots.thoughtbot.com/sandi-metz-rules-for-developers

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

      见http://apidock.com/rails/Module/delegate

      【讨论】:

      • 为什么不允许链接? @Shishir
      • 允许,不推荐。你可以偶尔例外。链接的问题是您从 OO 的角度打破了封装并且也难以重构。
      猜你喜欢
      • 1970-01-01
      • 2015-12-03
      • 2015-11-25
      • 2012-07-24
      • 2010-12-31
      • 2012-06-16
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多