在我的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
路径助手。
答案 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中很难做到,那么这可能不是最好的方法。