NoMethodError в Spree::Admin::Societies#новый неопределенный метод `societies_path'

Я новичок в веселье и рубине на рельсах. при создании пользовательского контроллера в моем приложении spree я могу успешно добавить ссылку на него в панель администратора spree, используя deface. но когда я перехожу по этой ссылке, мне выдает следующую ошибку

NoMethodError in Spree::Admin::Societies#new
Showing app/views/spree/admin/societies/_form.html.erb where line #1 raised:
undefined method `societies_path' for #<#<Class:0x007f19cb636898>:0x007f19c5ecacf8>

Я не знаю, откуда он ищет «путь_обществ», так как я уже обновил app/views/spree/admin/society/new.html.erb для поиска «путь_администраторов», вот он

<%= render 'form' %>
<%= link_to 'Back', admin_societies_path %>

и app/views/spree/admin/society/_form.html.erb содержит

    <%= form_for(@society) do |f| %>
     <% if @society.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@society.errors.count, "error") %> prohibited this society from being saved:</h2>
      <ul>
      <% @society.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :name %><br>
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :address %><br>
    <%= f.text_field :address %>
  </div>
  <div class="field">
    <%= f.label :area %><br>
    <%= f.text_field :area %>
  </div>
  <div class="field">
    <%= f.label :postcode %><br>
    <%= f.number_field :postcode %>
  </div>
  <div class="field">
    <%= f.label :city %><br>
    <%= f.text_field :city %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
    <% end %>

Я также пытался удалить ссылку назад, но она снова дает ту же ошибку.

config/routes.rb это

mount Spree::Core::Engine, :at => '/'
Spree::Core::Engine.add_routes do
 namespace :admin do
    resource :societies
  end
end

и мое приложение/controllers/spree/admin/society_controller.rb

module Spree
 module Admin
 class SocietiesController < Spree::Admin::BaseController
  before_action :set_society, only: [:show, :edit, :update, :destroy]

  def index
    @societies = Society.all
  end

  def show
  end

  def new
    @society = Society.new
  end

  def edit
  end

  def create
    @society = Society.new(society_params)

    respond_to do |format|
      if @society.save
        format.html { redirect_to @society, notice: 'Society was successfully created.' }
        format.json { render :show, status: :created, location: @society }
      else
        format.html { render :new }
        format.json { render json: @society.errors, status: :unprocessable_entity }
      end
    end
  end
  def update
    respond_to do |format|
      if @society.update(society_params)
        format.html { redirect_to @society, notice: 'Society was successfully updated.' }
        format.json { render :show, status: :ok, location: @society }
      else
        format.html { render :edit }
        format.json { render json: @society.errors, status: :unprocessable_entity }
      end
    end
  end

  def destroy
    @society.destroy
    respond_to do |format|
      format.html { redirect_to societies_url, notice: 'Society was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private
    def set_society
      @society = Society.find(params[:id])
    end

    def society_params
      params.require(:society).permit(:name, :url, :building_number, :address, :area, :postcode, :city, :active, :IsDelete)
    end
end
end
end

Любая помощь будет принята с благодарностью.


person Mahi L    schedule 18.09.2015    source источник


Ответы (1)


Я подозреваю, что именно эта строка в _form partial

<%= form_for(@society) do |f| %>

Здесь вам нужно указать пространство имен, так что, может быть, что-то вроде

<%= form_for([:admin, @society]) do |f| %>

или добавьте свой собственный URL

<%= form_for(@society, url: admin_societies_path) do |f| %>
person Scott    schedule 18.09.2015
comment
Большое спасибо, Скотт, ты спас меня... Добавление [:admin, @society] помогло. Ваше здоровье - person Mahi L; 18.09.2015
comment
Привет @Scott, меня беспокоит действие контроллера после сохранения, это дает мне ошибку неопределенного метода `admin_society_url' . Я попытался изменить его, как вы рекомендовали, но не решил, пожалуйста, помогите. ниже мой код response_to do |format| if @society.save format.html { redirect_to [:admin, @society], уведомление: «Общество успешно создано». } format.json { рендеринг : шоу, статус: : создано, местоположение: @society } конец - person Mahi L; 23.09.2015
comment
Попробуйте использовать redirect_to admin_society_path(@society) или убедитесь, что на вашей странице show.html.erb нет ссылок link_to, которые ссылаются на действие без пространства имен. - person Scott; 28.09.2015