rails path helper在模型中无法识别

时间:2015-02-14 22:12:53

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

在我的rails应用程序中,我有一个团队模型。我的团队的route.rb文件如下所示:

resources :teams

在我的teams_controller.rb文件中,行team_path(Team.first.id)正常工作,但我的模型team.rb中无法识别team_path网址助手。我收到此错误消息:

 undefined local variable or method `team_path' for # <Class:0x00000101705e98>
 from /usr/local/rvm/gems/ruby-1.9.3-p392/gems/activerecord-4.1.1/lib/active_record/dynamic_matchers.rb:26:in `method_missing'

我需要找到一种方法让模型识别team_path路径助手。

4 个答案:

答案 0 :(得分:15)

您应该能够以这种方式调用url_helpers:

Rails.application.routes.url_helpers.team_path(Team.first.id)

答案 1 :(得分:7)

考虑解决这个as suggested in the Rails API docs for ActionDispatch::Routing::UrlFor

Filter

如果是问题的# This generates, among other things, the method <tt>users_path</tt>. By default, # this method is accessible from your controllers, views and mailers. If you need # to access this auto-generated method from other places (such as a model), then # you can do that by including Rails.application.routes.url_helpers in your class: # # class User < ActiveRecord::Base # include Rails.application.routes.url_helpers # # def base_uri # user_path(self) # end # end # # User.find(1).base_uri # => "/users/1" 模型,请尝试以下方法:

Team

这是一种我更喜欢的替代技术,因为它为模型添加了更少的方法。

避免# app/models/team.rb class Team < ActiveRecord::Base include Rails.application.routes.url_helpers def base_uri team_path(self) end end 并使用include对象中的url_helpers代替:

routes

答案 2 :(得分:0)

要添加上一个答案,您可以使用Rails.application.routes.url_helpers,只需添加路由:as,如下例所示:

get "sessions/destroy/:param_id", as: :logout 

因此您可以按以下方式使用它:

Rails.application.routes.url_helpers.logout_path(:param_id => your_value)

希望这会有所帮助

答案 3 :(得分:-1)

模型不应该处理路径,重定向或任何东西之类的东西。这些东西纯粹是视图或控制器的构造。

该模型应该就是这样;你正在创造的东西的模型。它应该完整地描述这个东西,允许你找到它的实例,对它进行修改,对它进行验证......但是那个模型不会有任何关于什么路径应该用于任何东西的概念,甚至本身。

Rails世界中常见的一句话是,如果你发现很难做某事(比如从模型中调用路径助手),那你就错了。这意味着,即使有可能,如果在Rails中很难做到,那么这可能不是最好的方法。