从Rails模型方法返回两个标签?

时间:2015-08-28 11:16:02

标签: ruby-on-rails ruby-on-rails-4

我有一个带有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;
&#13;
&#13;

但我收到了一个错误:

&#13;
&#13;
undefined method `image_tag' for #<Procedure:0x007fe3a1707240>
&#13;
&#13;
&#13;

任何人都可以帮助我吗?

5 个答案:

答案 0 :(得分:1)

使用ActionController::Base.helpers.image_tag代替image_tag

您必须在模型中包含帮助程序。您的模型中还有另一种方法可以添加此方法:

 def helpers
    ActionController::Base.helpers
  end

然后在此模型中使用helpers.image_tag。您现在应该能够在模型中使用帮助器方法。 为了更好地理解,请参阅railscast.

答案 1 :(得分:1)

而不是在 model 中编写,您可以尝试将代码移动到 helper

&#xA;&#xA;
 #检查程序是否付款&#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函数truefalse返回,然后在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)%>