Почему я получаю ошибку "неопределенный метод" имя "для" в представлении Formtastic / haml, где "имя" является свойством модели? - PullRequest
0 голосов
/ 26 марта 2011

Возможно, это что-то глупое, но я не знаю достаточно о рельсах и рубине, чтобы увидеть это.У меня есть следующая схема и вид, но я получаю ошибку, указанную ниже.Бизнес наследует от учетной записи Devise, так что именно отсюда приходят электронная почта и пароль.

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

схема:

  create_table "businesses", :force => true do |t|
    t.string   "name"
    t.string   "street"
    t.string   "city"
    t.string   "zip"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

Просмотр:

#registrationForm
  -semantic_form_for(resource, :as => resource_name, :url=> registration_path(resource_name)) do |f|
    =f.input :name
    =f.input :email
    =f.input :password
    =f.input :password_confirmation
    =f.buttons

Ошибка:

undefined method 'name' for
<Business:0x000000052690f8 > Extracted source (around line #3):

Редактировать

Контроллер

class BusinessesController < Devise::RegistrationsController 
  respond_to :html
   def new
     super
     @business = Business.new
   end
end

Routes.rb

  devise_for :accounts 
  devise_for :businesses, :controllers => { :registrations => "businesses" }

Модель

class Business < Account 
end

консоль после перезагрузки схемы

k = Business.new ( :name =>"test" )
                          ^
(irb):1: syntax error, unexpected ')', expecting $end
    from /home/chance/.rvm/gems/ruby-1.9.2-p180@global/gems/railties-3.0.5/lib/rails/commands/console.rb:44:in `start'
    from /home/chance/.rvm/gems/ruby-1.9.2-p180@global/gems/railties-3.0.5/lib/rails/commands/console.rb:8:in `start'
    from /home/chance/.rvm/gems/ruby-1.9.2-p180@global/gems/railties-3.0.5/lib/rails/commands.rb:23:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

Ответы [ 2 ]

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

У вас есть таблица с именем «account» и таблица с именем «business».

Учетная запись создается с помощью devise, имеет все свои атрибуты и указывает на таблицу «accounts».Бизнес наследует от Account и поэтому использует возможности Rails STI ( наследование одной таблицы ).Поэтому он также указывает на таблицу «счетов».

Если бы у вас было Business < ActiveRecord::Base, это указывало бы на таблицу «предприятий».Механизм STI ActiveRecord очень странный.

Я думаю, вам нужно больше думать о том, как вы хотите, чтобы ваша модель данных работала.Возможно, Бизнес должен belong_to :account и иметь соответствующий: account_id.

Либо так, либо вы можете добавить все столбцы «бизнес» в таблицу счетов.

1 голос
/ 27 марта 2011

Попробуйте снова загрузить вашу схему

rake db:schema:load
...