1

我正在开发一个可以添加任务等的应用程序。我知道这有点奇怪,但我只是想看看其他人将如何实现这一点。您将如何将以下代码更改为辅助方法并使用它?

原始代码

<h2>My Tasks</h2>
<% task = @work.tasks %>
<% if task.empty? %>
  <%= link_to 'Create a new task', new_task_path %>
<% else %>
  <%= render :partial => 'notes/note', :locals => {:note => @note} %>
<% end %>

我做辅助方法的方式

def task_check
  task = @work.tasks 
  if task.empty? 
    link_to 'Create a new task', new_task_path
  else 
    render :partial => 'notes/note', :locals => {:note => @note} 
  end 
end

在我看来

<%= @work.task_check %>
4

2 回答 2

2

就个人而言,我根本不会提取它,这是视图逻辑,它属于视图。它绝对不属于模型,但可以说它可以被提取到帮助器中。我会稍微改变一下:

<h2>My Tasks</h2>
<% if @work.tasks.blank? %>
  <%= link_to 'Create a new task', new_task_path %>
<% else %>
  <%= render :partial => 'notes/note', :locals => {:note => @note} %>
<% end %>

即使is调用blank?而不是也会起作用empty?@work.tasksnil

.

于 2012-04-24T03:34:37.653 回答
1

您不能在模型中定义助手。它无权访问renderlink_to或任何其他控制器或视图方法。因此,只需几乎完全按照目录中的文件定义您的方法helpers,也许是application_helpers.rbwork_helpers.rb

def task_check(work, note)
  task = work.tasks 
  if task.empty? 
    link_to 'Create a new task', new_task_path
  else 
    render :partial => 'notes/note', :locals => {:note => note} 
  end 
end

然后在您的视图中调用它,如下所示:

<%= task_check(work, note) %>
于 2012-04-24T02:37:39.580 回答