Обработка форм с наследованием одной таблицы - PullRequest
4 голосов
/ 28 марта 2011

У меня есть форма в представлении редактирования моего профиля, начинающаяся с этой строки:

<% form_for @profile, :html => { :multipart => true } do |f| %>

Профиль подвергается наследованию одной таблицы, и двумя подклассами являются Profile :: Artist и Profile :: Listener.

Когда я пытаюсь получить доступ к окну редактирования профиля, я получаю эту ошибку:

NoMethodError in Profiles#edit

Showing /rubyprograms/dreamstill/app/views/profiles/edit.html.erb where line #1 raised:

undefined method `profile_artist_path' for #<#<Class:0x103359a18>:0x1033560c0>

где строки 1 - это строка кода для формы, которую я разместил выше. Как я могу исправить эту ошибку?

UPDATE:

Я добавил этот код в свою модель профиля:

def self.inherited(child)
  child.instance_eval do
    def model_name
      Vehicle.model_name
    end
  end
  super
end

А теперь моя ошибка изменилась на:

NameError in Profiles#edit

Showing /rubyprograms/dreamstill/app/views/profiles/edit.html.erb where line #1 raised:

uninitialized constant Profile::Vehicle

ОБНОВЛЕНИЕ 2:

Я изменил первую строку формы на:

<% form_for(:profile, @profile, :url => {:controller => "profiles", :action => "update"}, :html => { :multipart => true }) do |f| %>

и кнопку отправки на <%= f.submit :profile %>

Теперь я просто получаю ошибку маршрута ...

1 Ответ

3 голосов
/ 28 марта 2011

Не Vehile, а Profile!

def self.inherited(child)
  child.instance_eval do
    def model_name
      Profile.model_name
    end
  end
  super
end

или

def self.model_name
  name = "profile"
  name.instance_eval do
    def plural;   pluralize;   end
    def singular; singularize; end
    def i18n_key; singularize; end
    def human(*args); singularize; end
  end
  return name
end

UPDATE

Фактическая проблема была в форме. Вы должны добавить :method => :put

<%= form_for(@profile, :html => { :multipart => true, :method => :put }) do |f| %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...