在我看来,你所有的逻辑都应该放在你的控制器、模型、助手或库中。在您的情况下,设置变量应该在您的控制器中完成,而不是在您的视图中。
把你的逻辑放在好的地方真的很有趣,因为如果你的代码在好地方,调试、维护或重构你的应用程序会更容易。
所以,这里有一些想法可以将你的变量声明放在你的控制器中而不重复你的代码:)
before_action(在控制器中)
您可以before_action
在控制器中使用。它将减少重复的代码。
例如,您可以这样做:
before_action :set_variables
def set_variables
@var1 = some_code
@var2 = other_code
...
end
您可以使用only
or将 before_action 限制为仅特定操作except
before_action :set_variables, only: [:index, :edit]
这只会在索引和编辑之前调用 set_variables
before_action(在 application_controller.rb 中)
例如,如果您想为每个控制器中的所有索引操作添加 before_action,您只需在 application_controller.rb 中执行 before_action
而如果你想在特定的控制器中跳过这种类型的 before_action,你可以使用 skip_before_action 方法。
# application_controller.rb
before_action :set_variables, only: :index
# specific_controller.rb
skip_before_action :set_variables
还有一件事:模型范围
然后,结束前的最后一件事:Model1.where(some conditions)
。模型范围呢?
您的代码将更具可读性且重复更少:
class MyModel < ActiveRecord::Base
scope :active, -> { where(is_active: true) }
end
MyModel.active # equivalent to MyModel.where(is_active: true)