首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最佳实践--在Rails视图中传递实例变量或使用params?

最佳实践--在Rails视图中传递实例变量或使用params?
EN

Stack Overflow用户
提问于 2013-04-04 23:51:48
回答 2查看 11.4K关注 0票数 13

根据下面的例子,最佳实践是什么?

案例1

controller.rb ...

代码语言:javascript
复制
def index
  ...
  @group = params[:group]
  @team = params[:team]
  @org = params[:org]
  ...
end

index.html.haml

代码语言:javascript
复制
= link_to @group, '#'
= link_to @team, '#'
= link_to @org, '#'

案例2

controller.rb ...

代码语言:javascript
复制
def index
  ...

  ...
end

index.html.haml

代码语言:javascript
复制
= link_to params[:group], '#'
= link_to params[:team], '#'
= link_to params[:org], '#'

或者还有另一种选择,比如只传递一个哈希类型的实例变量.

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2013-04-04 23:59:13

通常,最好将参数拆分为实例变量,特别是当您需要对它们进行一些清理时。直接在视图中使用params有点麻烦,其效果是不必要地将视图绑定到传入参数的结构上。

控制器的工作是介于传入参数和视图本身之间。它应该从一种格式转换为另一种格式,以便您可以在不影响视图的情况下对参数进行更改,并在不更改参数要求的情况下将其转换到视图。

在不对参数进行某种处理的情况下,传递参数是不寻常的。大多数情况下,传入的参数用于从数据库中获取记录,或者用于某种容量的路由。

看到三个参数正在传入,然后在页面上逐字逐句地使用,这不是一个常见的用例。为什么要传递这些内容,而不是传递对其中一件可以用来确定其他事情的引用?

例如:

代码语言:javascript
复制
@team = Team.find_by_slug(params[:team_id])
@org = @team.org
@group = @team.group

这是大多数Rails应用程序的构造方式。

票数 7
EN

Stack Overflow用户

发布于 2013-08-29 05:36:42

如果您必须在这两个绝对#1之间进行选择,视图不应该使用params散列,因为它是一个混合的关注点。控制器的角色是处理params散列并为视图准备所有内容。

我认为更好的做法是根本不使用实例变量,而只是在控制器中使用助手方法:

代码语言:javascript
复制
def group
    params[:group]
end
helper_method :group

并认为:

代码语言:javascript
复制
= link_to group, '#'

通过这种方式,该方法是惰性的,只有在使用时才进行评估。

也要看一下

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15823695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档