link_to
is a view helper
which means it's only available in Rails views by default because it's a router
/ request
concern.
If you specifically want to use link_to
you have to include
it or reference it directly.
See this SO answer
include ActionView::Helpers::UrlHelper
...
cars.map { |c| link_to(c.name, c) }.join(" AND ")
There are other ways of getting paths than using link_to
that I would recommend you consider:
- It's arguable that the Rails team would tell you to use
UrlFor
as the tip in that link suggests:
Tip: If you need to generate URLs from your models or some other place, then ActionController::UrlFor is what you're looking for. Read on for an introduction. In general, this module should not be included on its own, as it is usually included by url_helpers (as in Rails.application.routes.url_helpers).
UrlFor
also allows one to access methods that have been auto-generated from named routes.
class User < ActiveRecord::Base
include Rails.application.routes.url_helpers
def base_uri
# named_route method that uses UrlFor
user_path(self)
end
end
User.find(1).base_uri # => "/users/1"
- create your own
concern
to bring in route helpers via ActionMailer
as this article suggests
As you may see if you scroll through other SO questions about including view helpers in models, there is pushback on using router
and request
-based methods outside of controllers
and views
because it violates the principles of MVC.
I think your use case can give you some peace of mind about this, but it's worth knowing the water is murky and some people may advise you otherwise.