我有一个带有is_payed方法的过程模型:
# checks if procedure is payed or not
def is_payed(request)
if self.payed
'Yes'
else
return 'No', link_to(image_tag('pay.png'), handle_procedure_payment_requests_path(procedure_id:self.id, request_id: request.id), method: :post, class:'pay-icon')
end
end

这里我尝试返回两件事:
1)字符串'否'
2)link_to标记,图像为链接
从视图中我调用该方法如下:
<%= procedure.is_payed(@request) %>
&#13;
但我收到了一个错误:
undefined method `image_tag' for #<Procedure:0x007fe3a1707240>
&#13;
任何人都可以帮助我吗?
答案 0 :(得分:1)
使用ActionController::Base.helpers.image_tag
代替image_tag
您必须在模型中包含帮助程序。您的模型中还有另一种方法可以添加此方法:
def helpers
ActionController::Base.helpers
end
然后在此模型中使用helpers.image_tag
。您现在应该能够在模型中使用帮助器方法。
为了更好地理解,请参阅railscast.
答案 1 :(得分:1)
而不是在 model
中编写,您可以尝试将代码移动到 helper
#检查程序是否付款&#xA; def is_payed(procedure,request)&#xA;如果procedure.payed&#xA; '是' &#XA;否则&#XA;返回'否',link_to(image_tag('pay.png'),handle_procedure_payment_requests_path(procedure_id:procedure.id,request_id:request.id),方法:: post,class:'pay-icon')&#xA;端&#XA;结束&#xA;
&#xA;&#xA; 并在视图中
&#xA;&#xA; &lt;%= is_payed(程序,@ request)%&gt;&#xA;
&#xA;
答案 2 :(得分:0)
出现此错误的原因是,您无法直接访问模型中的image_tag
视图辅助方法。如果要在模型中使用image_tag
辅助方法,则必须替换:
image_tag('pay.png')
使用:
ActionController::Base.helpers.image_tag("pay.png")
因此,您的代码段变为:
# checks if procedure is payed or not
def is_payed(request)
if self.payed
'Yes'
else
return 'No', link_to(ActionController::Base.helpers.image_tag("pay.png"), handle_procedure_payment_requests_path(procedure_id:self.id, request_id: request.id), method: :post, class:'pay-icon')
end
end
答案 3 :(得分:0)
您收到此错误,因为在执行<%= procedure.is_payed(@request) %>
方法时,您现在处于过程项的上下文中。 Procedure类无法访问来自视图助手的link_to方法。
我建议你只是从is_played
函数true
或false
返回,然后在erb
文件中执行link_to
方法
答案 4 :(得分:0)
image_tag
是一个帮手,应该只在视图中使用
您应该创建一个新帮助程序,为其命名,例如show_procedure_payed_info
def show_procedure_payed_info(procedure)
if(procedure.payed)
"Yes"
else
"No"...
end
end
并在视图中使用
<%= show_procedure_payed_info(@procedure)%>