ruby-on-rails - 在 Rails 中合并实例变量(将数据从 Controller 传递到 View )的最佳方法是什么?

标签 ruby-on-rails ruby ruby-on-rails-3 object instance-variables

我在 Rails 3 应用程序中有一个详细信息页面,其中包含多个实例变量。例如,我的 View 有以下实例:

@product
@program
@action
...etc...

其中一些是单个字符串,一些是数组(来自外部 API 的请求的结果)。总体而言,数据来自至少 3 个模型。

我的问题是:合并实例变量以使我的 View 和 Controller 看起来更干净(不牺牲可读性)的最佳方法是什么?我知道这个问题是开放式的,每个人都有自己的喜好,但是有哪些选择呢?我正在考虑将实例变量组合到一个对象中,所以之前的代码变成这样:

Details.product
Details.program
Details.action

非常感谢!

更新:采用对象路线,是否有实际实现它的任何好的示例(github、博客文章)?

最佳答案

在我看来,清理 Controller 操作的最佳方法是在其中分配尽可能少的实例变量。实际上,我尝试只在直接从传递给它的参数派生的 action/before_filters 中分配实例变量。另外,一般来说,我会尽可能多地将实例变量赋值给 before_filters 以保持 Action 的 slim 。

但是减少操作中实例变量赋值的最好方法是使用 View 助手。例如,如果您当前在用于输出一些 div 的操作中分配一个实例变量,只需使用 View 助手直接进行输出,而无需将对象传递给 View 。

这是 Controller 上的 before_filter 示例:

before_filter :assign_variables, :only => :show

def show; end

private
def assign_variables
  @product = Product.find(params[:product_id])
  @program = Program.find(params[:program_id])
  @action = Action.find(params[:action_id])
end

关于ruby-on-rails - 在 Rails 中合并实例变量(将数据从 Controller 传递到 View )的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12416890/

相关文章:

html - Css 覆盖列表样式

javascript - 如何在javascript中动态生成div id

ruby-on-rails - rails : Loading custom class from lib folder in controller

ruby - 使用 Nokogiri 提取所有表格行中的前 2 个表格单元格

ruby-on-rails - Rails 3本地化路线并显示资源

html - 强制单选按钮显示内联

javascript - Backbone 按 ID 删除行

ruby-on-rails - 带有局部变量的 FactoryGirl

ruby-on-rails - 如何使用 permit 或 require 过滤 params hash 中的键?

c - rails install pg - 找不到“libpq-fe.h header ”