gpt4 book ai didi

ruby-on-rails - 如何做侧边栏部分并将对象传递给它? -- rails 3.1

转载 作者:行者123 更新时间:2023-12-04 06:07:44 25 4
gpt4 key购买 nike

我在每页的侧栏中都有一个具有通用元素的布局(有些元素对于大多数页面来说是通用的,有些元素对于某些页面来说是独一无二的)。

--------------------------------
| | side box |
| | |
| |__________|
| | side box |
| | |
| |__________|
| | side box |
| | |
| | |
--------------------------------

现在我的做法是包含一个 shared/sidebar_type部分来自观点。 sidebar部分还包括页面类型应显示的单个框部分。

1)分割和包含这些部分并根据每个页面自定义在侧页上显示哪些内容框的最佳方法是什么?

2)设置对象并将它们传递到输出的那些部分(侧边栏框)的最佳实践

对于侧箱使用的数据,我在这里指的是。它应该作为所有其他 Controller 继承的全局变量进入主 Controller 吗?等等。

我是 PHP 世界中的 Rails 新手,这些共享部分的正确组织有点令人困惑。我目前将对象传递给那些盒子部分的方式似乎半途而废。

最佳答案

好。只是一个想法:你可以有一个 _side_bar 部分,它反过来包括在 Controller 方法中初始化的数组中确定的所有 _side_box 部分。所以你可以有这样的事情:

Controller :

...
def some_method
@side_boxes = ["side_box_1", "side_box_2", "side_box_3"]
...
end
...

some_method.html.erb(或者如果你想在所有页面中都使用 layouts/application.html.erb):
...
<%= render :partial => 'shared/side_bar' %>
...

_side_bar.html.erb:
...
<% @side_boxes.each do |partial_name| %>
<%= render :partial => "shared/#{parial_name}" %>
<% end %>
...

那么你必须有 _side_box_1.html.erb、_side_box_2.html.erb 等......

要回答问题的第二部分:如果您想将参数传递给部分,您可以将哈希参数 :locals 提供给渲染函数。像这样:
<%= render :partial => 'foo/bar', :locals => {:arg_1 => "argument1", :arg_2 => "argument2"} %>

然后你可以像局部变量一样在 _bar.html.erb 部分中使用这些参数:
<%= arg_1 + " " + arg_2 %>
#=> argument1 argument2

希望这可以帮助!

编辑

如果侧边栏将在整个站点中呈现,您可能希望在 ApplicationHelper (app/helpers/application_helper.rb) 中有一个 get_side_boxes 方法。这样,您只需将其放在 layouts/application.html.erb 中:
<% @side_boxes = get_side_boxes %>

每次加载页面时都会调用它。然后在您的 ApplicationHelper 中,您必须定义该函数的行为,以便它获取您正在呈现的特定 Controller 操作的 side_boxes。它会是这样的:

应用助手
def get_side_boxes
action = params[:action]
controller = params[:controller]
model = controller.classify #This will return the class name corresponding to that controller
model.constantize.get_side_boxes(action) #This will return whatever the CurrentModelName.get_side_boxes returns
end

然后在每个模型(或至少那些具有渲染 side_boxes 的 Controller 的模型)中,您必须实现一个 get_side_boxes 方法,该方法根据传递给它的操作返回适当的部分名称数组。就像是

某个模型
def self.get_side_boxes(action)
side_boxes = Array.new
case action
when "index"
side_boxes = ["side_box_1", "side_box_2"]
when "new"
side_boxes = ["side_box_3"]
when "edit"
...
...
end
side_boxes
end

然后你就不必在 Controller 中调用任何东西。

关于ruby-on-rails - 如何做侧边栏部分并将对象传递给它? -- rails 3.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8158417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com