【问题标题】: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' %>
使用您的控制器来处理用户输入并为您的视图设置变量/拉取模型数据。
祝你好运。