В моем коде есть 3 модели, все с ассоциацией «принадлежит_к/имеет_многие». Он выдает NoMethodError, когда я пытаюсь извлечь таблицы из таблицы ассоциаций моих объектов с помощью консоли rails и в моих представлениях.
Рассматриваемые модели:
class Coin < ActiveRecord::Base
# If coin is destroyed, so is their market prices
has_many :market_prices, dependent: :destroy
has_many :networks, dependent: :destroy
end
class MarketPrice < ActiveRecord::Base
belongs_to :coin
end
class Network < ActiveRecord::Base
belongs_to :coin
end
Рельсовая консоль:
2.0.0-p247 :004 > Coin.find_by_tag("btc").networkhashrate Coin Load (0.3ms) SELECT "coins".* FROM "coins" WHERE "coins"."tag" = 'btc' LIMIT 1
NoMethodError: undefined method `networkhashrate' for #<Coin:0x00000005b15030>
from /home/action/.rvm/gems/ruby-2.0.0-p247/gems/activemodel-4.0.0/lib/active_model/attribute_methods.rb:436:in `method_missing'
from /home/action/.rvm/gems/ruby-2.0.0-p247/gems/activerecord-4.0.0/lib/active_record/attribute_methods.rb:131:in `method_missing'
from (irb):4
from /home/action/.rvm/gems/ruby-2.0.0-p247/gems/railties-4.0.0/lib/rails/commands/console.rb:90:in `start'
from /home/action/.rvm/gems/ruby-2.0.0-p247/gems/railties-4.0.0/lib/rails/commands/console.rb:9:in `start'
from /home/action/.rvm/gems/ruby-2.0.0-p247/gems/railties-4.0.0/lib/rails/commands.rb:64:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'
Другой пример:
2.0.0-p247 :005 > coin = Coin.first
Coin Load (0.3ms) SELECT "coins".* FROM "coins" ORDER BY "coins"."id" ASC LIMIT 1
=> #<Coin id: 1, created_at: "2014-04-02 02:44:01", updated_at: "2014-04-02 02:44:01", tag: "10-5", name: "10-5", website: "">
2.0.0-p247 :006 > coin.coin_id
NoMethodError: undefined method `coin_id' for #<Coin:0x00000005b1c920>
from /home/action/.rvm/gems/ruby-2.0.0-p247/gems/activemodel-4.0.0/lib/active_model/attribute_methods.rb:436:in `method_missing'
from /home/action/.rvm/gems/ruby-2.0.0-p247/gems/activerecord-4.0.0/lib/active_record/attribute_methods.rb:131:in `method_missing'
from (irb):6
from /home/action/.rvm/gems/ruby-2.0.0-p247/gems/railties-4.0.0/lib/rails/commands/console.rb:90:in `start'
from /home/action/.rvm/gems/ruby-2.0.0-p247/gems/railties-4.0.0/lib/rails/commands/console.rb:9:in `start'
from /home/action/.rvm/gems/ruby-2.0.0-p247/gems/railties-4.0.0/lib/rails/commands.rb:64:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'
Схема.rb:
ActiveRecord::Schema.define(version: 20140402005453) do
create_table "coins", force: true do |t|
t.datetime "created_at"
t.datetime "updated_at"
t.string "tag"
end
create_table "market_prices", force: true do |t|
t.datetime "created_at"
t.datetime "updated_at"
t.integer "coin_id"
end
create_table "networks", force: true do |t|
t.integer "networkhashrate"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "coin_id"
end
end
Я не могу идти ни в ту, ни в другую сторону. Пример: Coin.find_by_tag("btc").networkhashrate или Network.find_by_coin_id("83").tag
У меня есть почти такая же установка в другом приложении, которое я написал, и оно работает отлично. Я перезагрузил консоль rails/перезапустил среду разработки. Почему рельсы не видят мою ассоциацию?
Спасибо, что нашли время, чтобы прочитать это.