Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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
Ruby on rails 视图中的重构逻辑_Ruby On Rails_Ruby_Ruby On Rails 4_Refactoring - Fatal编程技术网

Ruby on rails 视图中的重构逻辑

Ruby on rails 视图中的重构逻辑,ruby-on-rails,ruby,ruby-on-rails-4,refactoring,Ruby On Rails,Ruby,Ruby On Rails 4,Refactoring,目前,我的视图中有大量关于活动/show.html.erb的逻辑: <% if current_account.active? %> <% if @campaign.pending? %> <%= render 'campaigns/dashboard/nulldashboard' %> <% elsif @campaign.disabled? %> <%= render 'campaigns/dashboard

目前,我的视图中有大量关于活动/show.html.erb的逻辑:

<% if current_account.active? %>
  <% if @campaign.pending? %>
    <%= render 'campaigns/dashboard/nulldashboard' %>
  <% elsif @campaign.disabled? %>   
    <%= render 'campaigns/dashboard/disableddashboard' %>
  <% elsif @campaign.stats? %>   
    <%= render 'campaigns/dashboard/livedashboard' %>
  <% else %>
    <%= render 'campaigns/dashboard/awaitingdatadashboard' %>
  <% end %>
<% elsif current_account.pending? %>
  <%= render 'campaigns/dashboard/awaitingactivation' %>
<% end %>
我的问题是,我如何去清理这个代码?我对rails还很陌生,不太确定我会怎么做


多谢

您可以创建一个视图模型,有些人将其称为页面对象

我不太清楚您的目的是什么,但可以说您希望根据一些不同的输入呈现不同的仪表板:

class DashboardPage
  attr_reader :account, :campaign

  def initialize(account, campaign)
    @account, @campaign = account, campaign
  end 

  def render_dashboard?
    account.active? || account.pending?
  end

  def dashboard_template
    if account.active?
      active_account_template
    else
      'campaigns/dashboard/awaitingactivation'
    end
  end

  private

  def active_account_template
    # the inner if goes here...
  end
end

# In your controller

@page_object = DashboardPage.new(current_account, @campaign)

# In your view

<% if @page_object.render_dashboard? %>
  <%= render @page_object.dashboard_template %>
<% end %>
class仪表板页面
属性读取器:帐户,:活动
def初始化(帐户、活动)
@帐户,@campaign=帐户,活动
结束
def渲染_仪表板?
account.active?||帐户。待定?
结束
def仪表板模板
如果account.active?
活动帐户模板
其他的
“活动/仪表板/等待活动”
结束
结束
私有的
def活动账户模板
#内心的如果在这里。。。
结束
结束
#在控制器中
@页面\对象=仪表板页面。新建(当前\帐户,@campaign)
#在你看来

您可以创建一个视图模型-有些人将其称为页面对象

我不太清楚您的目的是什么,但可以说您希望根据一些不同的输入呈现不同的仪表板:

class DashboardPage
  attr_reader :account, :campaign

  def initialize(account, campaign)
    @account, @campaign = account, campaign
  end 

  def render_dashboard?
    account.active? || account.pending?
  end

  def dashboard_template
    if account.active?
      active_account_template
    else
      'campaigns/dashboard/awaitingactivation'
    end
  end

  private

  def active_account_template
    # the inner if goes here...
  end
end

# In your controller

@page_object = DashboardPage.new(current_account, @campaign)

# In your view

<% if @page_object.render_dashboard? %>
  <%= render @page_object.dashboard_template %>
<% end %>
class仪表板页面
属性读取器:帐户,:活动
def初始化(帐户、活动)
@帐户,@campaign=帐户,活动
结束
def渲染_仪表板?
account.active?||帐户。待定?
结束
def仪表板模板
如果account.active?
活动帐户模板
其他的
“活动/仪表板/等待活动”
结束
结束
私有的
def活动账户模板
#内心的如果在这里。。。
结束
结束
#在控制器中
@页面\对象=仪表板页面。新建(当前\帐户,@campaign)
#在你看来

是整个视图还是仅部分视图?是整个视图还是仅部分视图?另请参见presenter pattern@Jesper Thank。。已删除。另请参见演示者模式@Jesper Thank。。删除。