我正在创建一个管理模板,并且有一个定制器部分,在其中创建了3个单选按钮(名为:红色,蓝色,绿色)。有一个左侧的侧边栏导航菜单,我想通过单击单选按钮来更改侧边栏导航菜单的背景颜色。 如果我单击该按钮,则会通过添加一个类来更改侧边栏导航菜单的bg颜色,但是如果我要转到另一个页面,则会重新加载该类,并删除该类。
我尝试了一件事情,在我的application_helper.rb中,我添加了以下代码
def is_active(action)
@color = "red"
params[:action] == action_name ? @color : nil
end
在我的布局文件夹中,我有一个部分文件_sidebar.html.erb,在外部div上,我正在像下面那样使用此帮助程序
<div class="sidebar-nav <%= is_active('action_name') %>" id="collapse-sidebar" >
我在这里做的是,检查动作名称是否匹配,然后添加存储在实例变量@color中的红色类
如果我可以将单选按钮的值动态传递给application_helper文件,则意味着如果我单击红色,则该值应为红色,绿色,然后该值应为绿色。然后我可以在应用程序帮助程序中动态更改类名,进而可以更改侧边栏的颜色。
请,如果我做错了什么,或者这不是正确的方法,或者我们无法在ruby on rails中实现这种功能,请承认我,这将是可理解的。
谢谢
答案 0 :(得分:2)
不确定我是否理解您,但是实例变量在两次请求之间丢失,因此使用@color
代替red
没有意义。
如果您想坚持 red
,然后将其存储在会话中或将其作为参数传递。
答案 1 :(得分:1)
我正在重新定义您的侧边栏代码:
<div class="sidebar-nav <%= selected_color(params[:action]) %>" id="collapse-sidebar" >
假设您要在action
参数中传递颜色名称(“红色”,“蓝色”或“绿色”),则application_helper.rb
代码将如下所示:
def selected_color(action_color_name)
colors = ['Red','Blue', 'Green']
colors.include? action_color_name ? action_color_name : nil
end
另外,将action
存储在一个隐藏的变量中,以便在转到其他页面时保留颜色。如果这不起作用,只需将sidebar_color
存储在数据库的配置表中,并在单击相应的单选按钮时更新属性。
希望这会有所帮助。