【问题标题】:rails 4 undefined method `_index_path' when using form_for with plural class name使用带有复数类名的form_for时,rails 4未定义方法`_index_path'
【发布时间】:2015-05-18 14:44:36
【问题描述】:

我已经浏览了很多关于这个错误的问题,但很遗憾我没有找到正确的答案。

我使用rails generate scaffold Avis --force-plural 创建了Avis 类(在法语中,它采用s,无论它是单数还是复数。)。

因为它是 Formation 类的一部分,所以这里是 route.rb 文件(部分):

resources :formations do
    resources :avis
end

这是Avis 控制器:

class AvisController < ApplicationController
  before_action :set_avi, only: [:show, :edit, :update, :destroy]
  before_action :set_formation

  #On indique que les tests sont fait sur l'autorisation des utilisateurs
  load_and_authorize_resource :formation

  # gestion du layout
  layout :sections_layout
  @layout = 'back'

  respond_to :html

  def sections_layout
    @layout
  end

  def index
    @avis = Avis.where(:formations_id => Formation.find_by(:id => formation_params))
    respond_with(@avis)
  end

  def show
    respond_with(@avi)
  end

  def new
    @avi = Avis.new
    respond_with(@formation, @avi)
  end

  def edit
  end

  def create
    @avi = Avis.new(avis_params)
    @avi.save
    respond_with(@avi)
  end

  def update
    @avi.update(avis_params)
    respond_with(@avi)
  end

  def destroy
    @avi.destroy
    respond_with(@avi)
  end

  private
    def set_avi
      @avi = Avis.find(params[:id])
    end

    def avis_params
      params[:avi]
    end

    def formation_params
    params.require(:formation_id)
    end

    def set_formation
        @formation = Formation.find_by(:id => params[:formation_id])
        if @formation == nil
          redirect_to forbidden_path :status => 403
        end
      end
end

当我尝试创建一个新的Avis 时,我收到了这个错误:

ActionView::Template::Error (undefined method `avis_index_path' for #<#<Class:0x007ffa6052aa78>:0x007ffa60528b88>):
    1: <% puts @avi%>
    2: 
    3: <%= form_for(@avi) do |f| %>
    4:   <% if @avi.errors.any? %>
    5:     <div id="error_explanation">
    6:       <h2><%= pluralize(@avi.errors.count, "error") %> prohibited this avi from being saved:</h2>
  app/views/avis/_form.html.erb:3:in `_app_views_avis__form_html_erb__481767065103572634_70356711120220'
  app/views/avis/new.html.erb:3:in `_app_views_avis_new_html_erb___1382100742020377330_70356626529020'
  app/controllers/avis_controller.rb:29:in `new'

我该如何解决这个问题?

【问题讨论】:

    标签: ruby-on-rails ruby plural


    【解决方案1】:

    AviFormations 的嵌套资源,您的 form_for 应该类似于 form_for(@formation, @avi),它将使用正确的formation_avis_path。

    有关嵌套资源的更多信息,请查看Rails Routing from the Outside In

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-30
      相关资源
      最近更新 更多