我正在尝试学习如何在我的Rails 5应用程序中使用帮助程序。
我有一个org_requests模型,它具有保存采取各种步骤的日期的属性。在保存相关控制器操作时,我尝试使用控制器更新这些属性。
例如,我有一个名为:approved_at的属性。在我的控制器中,我有一个名为approved的行动:
def approved
@org_request = current_user.organisation.org_requests.find(params[:id])
if @org_request.state_machine.transition_to!(:approved)
@org_request.update_attribute(approved_at: Time.zone.now)
flash[:notice] = "You've added this member."
redirect_to org_requests_path
else
flash[:error] = "You're not able to manage this organisation's members"
redirect_to :index
end
end
我认为这一行:
@org_request.update_attribute(approved_at: Time.zone.now)
当保存批准的操作时,现在可以节省时间。
在我看来,我试图渲染相关行动的时间。要做到这一点,我试着写:
<% @org_requests.each do |org_req| %>
<%= text_for_time_of_status_change(org_req.current_state) %>
然后我有一个帮助者:
def text_for_time_of_status_change(current_state)
case current_state
when 'requested'
org_request.requested_at.try(:strftime, ' %l:%M %e %B %Y')
when 'approved'
org_request.approved_at.try(:strftime, ' %l:%M %e %B %Y')
when 'rejected'
org_request.rejected_at.try(:strftime, ' %l:%M %e %B %Y')
when 'removed'
org_request.removed_at.try(:strftime, ' %l:%M %e %B %Y')
end
end
我无法向我的助手提供类似的org_request(因为它不会接受&#39;。&#39;):
def text_for_time_of_status_change(org_request.current_state)
这不对。我甚至不确定我是否需要使用&#39; @&#39;在org_request之前(虽然我在尝试时遇到错误)。
任何人都可以看到我需要做什么才能使用视图助手吗?
这些文章:http://6ftdan.com/allyourdev/2015/01/28/rails-helper-methods/似乎暗示帮助者并不打算用于表示逻辑。也许他们意味着其他一些类型的行动。我不确定我是否正在尝试使用帮手以达到正确的目的。
答案 0 :(得分:1)
您必须更新text_for_time_of_status_change
方法并传递org_req
而不是org_req.current_state
。您收到错误是因为您想访问org_request
变量但未将其传递给辅助方法。完成此更改后,请不要忘记更新帮助方法代码,以便在org_request.current_state
current_state
而不是case
答案 1 :(得分:0)
你必须修复你的setTimeout()
,最好在你的情况下使用partial:
助手:
setTimeout
而不是创建部分:
_requested.html.erb
helper
比在视图中使用部分集合:
def text_for_time_of_status_change(org_request)
case org_request.current_state
when 'requested'
org_request.requested_at.try(:strftime, ' %l:%M %e %B %Y')
when 'approved'
org_request.approved_at.try(:strftime, ' %l:%M %e %B %Y')
when 'rejected'
org_request.rejected_at.try(:strftime, ' %l:%M %e %B %Y')
when 'removed'
org_request.removed_at.try(:strftime, ' %l:%M %e %B %Y')
end
end