如何更改为查看帮助方法?

时间:2012-04-24 01:59:52

标签: ruby-on-rails ruby ruby-on-rails-3

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

原始代码

<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 %>

2 个答案:

答案 0 :(得分: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 %>

即使blank?empty?

,调用@work.tasks代替nil也会有效

答案 1 :(得分: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) %>