You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails Photo模型调用link_to报错:undefined method `link_to' for #<Photo

问题原因

link_to是Rails视图层(ActionView)的专属辅助方法,模型(Model)层默认不会加载这些视图相关的方法,所以直接在Photo模型里调用会报「undefined method `link_to'」的错误。

修复方案

方案1:遵循MVC职责分离(推荐)

把生成链接的逻辑移到视图或者Helper里,这才是符合Rails MVC设计的做法:

  • 直接在视图模板中编写:
    <%= @photo.cars.map { |c| link_to(c.name, c) }.join(" AND ") %>
    
  • 或者在app/helpers/photos_helper.rb中封装复用方法:
    def car_links(photo)
      photo.cars.map { |c| link_to(c.name, c) }.join(" AND ")
    end
    
    之后在视图里调用即可:
    <%= car_links(@photo) %>
    

方案2:在模型内生成链接(不推荐,破坏职责边界)

如果业务需求必须在模型层实现,需要手动构建HTML链接并引入路由辅助方法:

# app/models/photo.rb
include Rails.application.routes.url_helpers

def car_links
  cars.map do |car|
    # 用ERB::Util.h转义内容,防范XSS攻击
    "<a href='#{car_path(car)}'>#{ERB::Util.h(car.name)}</a>"
  end.join(" AND ")
end

调用该方法时,要在视图中用raw()输出,避免HTML被转义:

<%= raw @photo.car_links %>

内容的提问来源于stack exchange,提问作者rctneil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 12:33:19