【问题标题】:How to remove logic from rails view when every case have diferent styleing当每个案例都有不同的样式时如何从 Rails 视图中删除逻辑
【发布时间】:2026-02-21 08:15:01
【问题描述】:

我的问题是我的观点有逻辑,但每个案例都有不同的风格。将逻辑移至 .ex Presenter 不是问题,而是如何处理样式

- trumps.each do |trump| 
%tr
 %td
  - if trump.isgreate
    .some_style
     .some_style--button
      =link_to trump.picture
  - else
    .someother_style
     .someother_style--button
      =link_to trump.lies

【问题讨论】:

    标签: ruby-on-rails view logic presenter


    【解决方案1】:

    基本上你需要将逻辑移到 View Helpers 中。

    # create helper in relevant *helper.rb
    
    def outer_div(trump)
      trump.isgreate ? 'some_style' : 'someother_style'
    end
    
    def inner_button_div(trump)
      trump.isgreate ? 'some_style--button' : 'someother_style--button'
    end
    
    dev link_to_trump
      link_to(trump.isgreate ? trump.picture : trump.lies)
    end
    
    
    - trumps.each do |trump| 
      %tr
       %td
         %div{class: outer_div(trump)}
           %div{class: inner_button_div(trump) }
             = link_to_trump(trump)
    

    【讨论】:

    • 这正是我想要的。谢谢
    【解决方案2】:

    css 类呢?

    无论如何都不应该在控制器或模型中进行样式设置。

    尽管您必须提供您的开发环境才能获得任何相关的答案。比如你正在使用的 ruby​​ 和 rails 版本,甚至你的操作系统......事情可能会有所不同。

    通常人们不会试图帮助你,但我曾经就是这样,在没有先查资料的情况下提出问题。

    对于 Rails 6, 在 app/assets/stylesheets 中添加一个 css 文件。您应该在 application.html.erb 文件(全局视图文件)中看到类似的内容

       <%= stylesheet_link_tag 'application', media: 'all', :'data-turbolinks-track' => 'reload' %>
    

    使用您的控制器来处理用户输入并为您的视图设置变量/拉取模型数据。

    祝你好运。

    【讨论】: