【问题标题】:Rails undefined method `<model_name>_index_path' forRails 未定义的方法 `<model_name>_index_path' 用于
【发布时间】:2014-06-10 15:12:20
【问题描述】:

我在使用 form_for 时遇到了问题。 Rails 正在启动以下错误:

undefined method `<model_name>_index_path' for #<#<Class:0x9f6b4dc>:0x9c381c0>

在 denuncia.html.erb 的这一行(用 Denuncia.new 替换 @denuncia 不起作用):

<%= form_for @denuncia do |f| %>

所有代码如下:

routes.rb

Rails.application.routes.draw do
  root 'welcome#index'
  get 'form' => 'form#denuncia'
  resources :form

form_controller.rb

class FormController < ApplicationController
    def denuncia
       @denuncia = Denuncia.new
    end
end

denuncia.html.erb

<%= form_for @denuncia do |f| %>
    <%= f.input :onde %>
    <%= f.input :quando %>
    <%= f.input :descricao %>
    <%= f.button :submit %>
<% end %>

这看起来很奇怪,因为模型正在初始化(或者看起来是)。提前感谢大家的帮助! (:

【问题讨论】:

  • 你能发布你的rake routes 输出吗?
  • 表格应该邮寄到哪里?
  • 我假设 是实际型号名称的替代品,还是您得到的确切错误代码?

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


【解决方案1】:

由于模型是Denuncia,所以只有form_for @denuncia rails 会查看模型并尝试转到未定义的denuncias_path。资源通常是多元化的,所以如果你改成resources :forms,那么改成这个应该可以工作

<%= form_for @denuncia, url: forms_path do |f| %>

抱歉,不确定resources :form 的路径是什么,但您可以通过rake routes 找到答案。

如果您更改为resources forms,则需要进行更改以将表单目录复数为表单,并将form_controller 复数为forms_controller

【讨论】:

  • from api.rubyonrails.org/classes/ActionView/Helpers/… &lt;%= form_for @post do |f| %&gt; ... &lt;% end %&gt; 完全没问题,但它通常会转到 post_path ,这是创建路径而不是 post_index_path。
  • 巴鲁是对的。如果@denuncia 对象是 Denuncia 模型的一个实例,那么默认情况下,rails 将查找 denuncias_path,除非您像 Baloo 那样指定另一个路径。这些都是 Rails 约定的一部分,当您知道它是如何工作的时,它们会非常方便。你可以在这里阅读更多:guides.rubyonrails.org/getting_started.html#the-first-form
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
  • 2017-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多