Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从视图中删除逻辑_Javascript_Ruby On Rails_Ruby_Performance - Fatal编程技术网

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语句,用于根据用户的订阅状态确定向用户显示哪个按钮。我听说我们应该尽量把逻辑排除在视图之外。有没有更好的方法来实现这一点(甚至可以更快地加载)?我不确定如何合并javascript,因为如果用户的系统没有javascript,我无法向用户显示所有按钮

<% 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更适合代码重构