加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 在Rails中合并实例变量(将数据从控制器传递到

发布时间:2020-12-17 03:14:50 所属栏目:百科 来源:网络整理
导读:我在Rails 3应用程序中有一个详细信息页面,它有几个实例变量.例如,我的视图有以下实例: @product@program@action...etc... 其中一些是单个字符串,一些是数组(来自外部API的请求的结果).总的来说,数据来自至少3个型号. 我的问题是:合并实例变量的最佳方法是
我在Rails 3应用程序中有一个详细信息页面,它有几个实例变量.例如,我的视图有以下实例:

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

其中一些是单个字符串,一些是数组(来自外部API的请求的结果).总的来说,数据来自至少3个型号.

我的问题是:合并实例变量的最佳方法是什么,这样我的视图和控制器看起来更干净(不牺牲可读性)?我理解这个问题是开放式的,每个人都有自己的偏好,但有哪些选择呢?我正在考虑将实例变量组合到一个对象中,以便前面的代码变成这样:

Details.product
Details.program
Details.action

非常感谢!

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

解决方法

在我看来,清理控制器操作的最佳方法是在那里分配尽可能少的实例变量.在实践中,我尝试仅在action / before_filters中分配实例变量,这些变量直接从传递给它的参数派生.此外,一般来说,我尽可能多地将实例变量赋值推送到before_filters,以便保持操作的苗条.

但是,减少操作中的实例变量赋值的最佳方法是使用视图助手.例如,如果您当前在用于输出某个div的操作中分配实例变量,则只需使用视图助手直接执行输出,而无需将对象传递给视图.

以下是控制器上的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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读