Проблема с наследованием одной таблицы в форме редактирования - PullRequest
2 голосов
/ 20 сентября 2011

Я использую наследование одной таблицы в ROR3, поэтому я создал следующие модели:

class Promotion < ActiveRecord::Base

...

end

class CreditPromotion < Promotion
end

class DebitPromotion < Promotion
end

Затем я создал общую форму в частичном представлении

<%= form_for([:admin, @promotion]) do |f| %>
      #Many fields for promotion
<% end %>

В новом действии эта формаработать очень хорошоОднако в действии редактирования выведите это сообщение об ошибке:

NoMethodError in Admin/promotions#edit

Showing /home/mperez/Proyectos/Habitue/commerce/commerce/app/views/admin/promotions/_form.html.erb where line #48 raised:

undefined method `admin_debit_promotion_path' for #<#<Class:0x7fcf57ada178>:0x7fcf57ad6820>

Extracted source (around line #48):

45:     });
46: </script>
47: 
48: <%= form_for([:admin, @promotion]) do |f| %>
49:     <% if @promotion.errors.any? %>
50:         <div id="error_explanation">
51:           <h2><%= pluralize(@promotion.errors.count, "error") %> prohibited this promotion from being saved:</h2>

Обновление: ДОБАВИТЬ МАРШРУТЫ

Rails3::Application.routes.draw do

  # Administration
  namespace :admin do
    match 'dashboard/update_cities' => 'dashboard#update_cities', :as => :update_cities
    match 'dashboard/update_departments' => 'dashboard#update_departments', :as => :update_departments
    match 'dashboard/update_towns' => 'dashboard#update_towns', :as => :update_towns
    match 'promotions/unlimmited_quota' => 'promotions#unlimmited_quota', :as => :unlimmited_quota
    match 'promotions/unlimmited_limit_per_user' => 'promotions#unlimmited_limit_per_user', :as => :unlimmited_limit_per_user

    root :to => 'dashboard#index'

    resources :settings
    match '/settings/update_settings' => 'settings#update_settings',  :requirements => { :method => :post }
    resources :announcements
    resources :commits
    resources :sellers
    resources :commerces
    resources :commerce_visits
    resources :promotions do
      collection do
        post :load_promotion_fields
      end
    end

    #resources :debit_promotions, :controller => :promotions
    #resources :credit_promotions, :controller => :promotions
    #resources :gift_promotions, :controller => :promotions

    resources :store_points

    match '/users/search' => 'users#search',  :requirements => { :method => :get }

    resources :users do 
      member do 
        put :suspend
        put :unsuspend
        put :activate
        delete :purge
        put :reset_password
        get :set_user_login
        get :set_user_email        
      end
      collection do
        get :pending
        get :active
        get :suspended
        get :deleted
      end
    end
  end
end

В чем может быть проблема?

Я понимаю проблему с маршрутами.Однако я не хочу менять его.

Как можно использовать наследование одной таблицы с общей формой?

Заранее спасибо

Ответы [ 2 ]

3 голосов
/ 22 сентября 2011

Когда вы приступаете к редактированию вашей Акции, она уже была создана как DebitPromotion.

form_for([:admin, @promotion])

пытается перейти на несуществующий путь admin_debit_promotion_path (@promotion)

Поэтому переопределите его, чтобы перейти к правильному маршруту и ​​контроллеру, как это:

form_for([:admin, @promotion], :url => admin_promotion_path(@promotion))
0 голосов
/ 01 февраля 2013

Правильная форма для решения этой проблемы:

form_for([:admin, @promotion],
         as: :promotion,
         url: admin_promotion_path(@promotion) ) do |f|
...