13

根据以下示例,最佳实践是什么?

情况1

控制器.rb ...

def index
  ...
  @group = params[:group]
  @team = params[:team]
  @org = params[:org]
  ...
end

index.html.haml

= link_to @group, '#'
= link_to @team, '#'
= link_to @org, '#'

案例2

控制器.rb ...

def index
  ...

  ...
end

index.html.haml

= link_to params[:group], '#'
= link_to params[:team], '#'
= link_to params[:org], '#'

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

谢谢!

4

2 回答 2

7

通常,将参数拆分为实例变量是一个更好的主意,尤其是当您需要对它们进行一些清理时。直接在视图内部使用params有点混乱,并且会不必要地将视图绑定到传入参数的结构。

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

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

看到三个参数被传入然后在页面上按字面意思使用并不是一个常见的用例。你为什么要传递这些而不是传递对其中一个可用于确定其他事物的引用?

例如:

@team = Team.find_by_slug(params[:team_id])
@org = @team.org
@group = @team.group

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

于 2013-04-04T23:59:13.363 回答
7

如果您必须在这两个绝对#1之间进行选择,则视图不应使用 params 哈希,因为它是一个混合问题。控制器的作用是处理参数哈希并为视图准备一切。

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

def group
    params[:group]
end
helper_method :group

在视图中:

= link_to group, '#'

这样,该方法是惰性的,仅在使用时才进行评估。

也看看

于 2013-08-29T05:36:42.493 回答