我正在开发一个可以添加任务等的应用程序。我知道这有点奇怪,但我只想看看其他人如何实现这一点。您如何将以下代码更改为辅助方法并使用它?
原始代码
<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 %>
答案 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)
您无法在模型中定义帮助程序。它无权访问render
,link_to
或任何其他控制器或视图方法。因此,只需定义您的方法几乎与helpers
目录中的文件一样,可能是application_helpers.rb
或work_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) %>