Javascript 如何从视图中删除逻辑
目前,我的视图中有几个if语句,用于根据用户的订阅状态确定向用户显示哪个按钮。我听说我们应该尽量把逻辑排除在视图之外。有没有更好的方法来实现这一点(甚至可以更快地加载)?我不确定如何合并javascript,因为如果用户的系统没有javascript,我无法向用户显示所有按钮Javascript 如何从视图中删除逻辑,javascript,ruby-on-rails,ruby,performance,Javascript,Ruby On Rails,Ruby,Performance,目前,我的视图中有几个if语句,用于根据用户的订阅状态确定向用户显示哪个按钮。我听说我们应该尽量把逻辑排除在视图之外。有没有更好的方法来实现这一点(甚至可以更快地加载)?我不确定如何合并javascript,因为如果用户的系统没有javascript,我无法向用户显示所有按钮 <% if @user.subscription_status == 'active' %> <%= link_to "Downgrade to free account", cancel_subsc
<% if @user.subscription_status == 'active' %>
<%= link_to "Downgrade to free account", cancel_subscription_path(@user) %>
<% end %>
<% if @user.subscription_status == 'canceled' %>
<%= link_to "Reactivate", reactivate_subscription_path(@user) %>
<% end %>
<% if !@user.subscription_id %>
<%= link_to "Upgrade", new_subscription_path(@user) %>
<% end %>
有几种选择
但首先:
- 您当前的实现非常糟糕:除了您的对象之外,没有人必须检查其内部
- 有几个条件并不是什么大问题
def active?
subscription_status == 'active'
end
并替换:
<% if @user.subscription_status == 'active' %>
与:
如果你想深入挖掘,看看装饰师,比如德雷珀宝石
如果需要OneLiner,请使用链接到
,多个选项
但首先:
- 您当前的实现非常糟糕:除了您的对象之外,没有人必须检查其内部
- 有几个条件并不是什么大问题
def active?
subscription_status == 'active'
end
并替换:
<% if @user.subscription_status == 'active' %>
与:
如果你想深入挖掘,看看装饰师,比如德雷珀宝石
如果您想要使用OneLiner,请使用
链接到\u If
,使用帮助程序
和用例语句,而不是If else
,就像“活动”时的用例订阅状态一样。。当“取消”时。。。其他的结束
谢谢。helper方法将返回什么?例如,链接文本或部分etcit将返回link_to
您所做的。如果不以这种方式实现,视图不得检查模型的值,只需发送消息哦,是的,您也可以使用活动?
取消?
作为一个函数,这样在模型中对您会有帮助,但在这种情况下,case语句总是比elsif更适合用于代码重构使用帮助程序
和使用case语句,而不是if else
如case subscription\u status当“活动”时。。当“取消”时。。。其他的结束
谢谢。helper方法将返回什么?例如,链接文本或部分etcit将返回link_to
您所做的。如果不以这种方式实现,视图不得检查模型的值,只需发送消息哦,是的,您也可以使用活动?
取消?
作为一个函数,这样在模型中对您会有帮助,但在这种情况下,case语句总是比elsif更适合代码重构