Rails的link_to方法的奇怪行为

19 浏览
0 Comments

Rails的link_to方法的奇怪行为

问题:当我点击link_to操作时,应用程序调用另一个控制器,导致缺少id错误。

我有一个菜单,显示用于创建新对象的按钮,当用户创建对象后,这些按钮会转换为导航链接。

行为使用object.exists?辅助程序。

  
  
 

感谢这篇文章:

https://stackoverflow.com/questions/13186722/what-is-the-difference-between-using-exists-and-present-in-ruby

我可以创建一个新的公司并访问编辑链接,但是当我尝试随后创建一个预审文件时,我得到:

Prequalifications#new中的ActionController::UrlGenerationError
No route matches {:action=>"edit", :controller=>"companies", :format=>nil, :id=>nil, :locale=>:en},可能的未匹配约束:[:id]

公司和预审的控制器是分开的。我不明白为什么会出现此错误。特别是当我在执行预审之前删除公司模型的引用链接时,它似乎按预期工作。

我的路由非常简单:

resources :prequalifications
resources :companies

我的控制器也很简单:

def new
 @company = Company.new
end
def create
 @company = current_user.build_company(company_params)
end
def edit
 @user = current_user
 @company = Company.find_by(id: [params[:id], params[:company_id]])
end

另一个模型的控制器看起来非常相似。

这种行为可能来自哪里?

0
0 Comments

在这个问题中,出现错误的原因是在使用link_to时,传入了nil作为参数,而routes.rb文件中定义了在编辑一个公司时需要传入一个有效的id。这导致了生成URL时出现错误。

解决方法是使用.exists?.exists来测试对象是否存在,而不是测试类是否存在。因为Company.existsPrequalification.exists始终为true,不管对象是否存在。因此,需要将它们改为使用.exists?来测试实际的公司和预先资格是否存在。

Vincent的建议解决了这个问题。但是,使用x.exists?仍然无法正常工作。并且,Rails在调用另一个控制器时并不是直接调用,而是通过URL生成器生成URL。因此,在生成URL时,如果传入了nil而不是有效的id,就会出现错误。

以上就是关于"Strange behavior of rails with link_to"问题的出现原因以及解决方法的整理。

0