如何在application_helper中传递输入类型单选的值?

时间:2019-04-23 09:29:41

标签: ruby-on-rails ruby

我正在创建一个管理模板,并且有一个定制器部分,在其中创建了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中实现这种功能,请承认我,这将是可理解的。

谢谢

2 个答案:

答案 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存储在数据库的配置表中,并在单击相应的单选按钮时更新属性。 希望这会有所帮助。