Методы Rails в модели недоступны - PullRequest
2 голосов
/ 29 ноября 2010

Я боролся с раздражающей вещью весь день.

У меня есть класс модели, который подключается к другому с помощью соединения has_many. Это работает нормально, но когда я пытаюсь получить доступ к не-db методам из класса, я получаю ошибку, что модель не содержит метод Я поместил метод в attr_accessible, так что я думаю, что он должен быть доступен.

Вот модель для первого класса:

class Recipe < ActiveRecord::Base
  validates :name,  :presence => true,
                    :length   => { :maximum => 100 }

  attr_accessible :ingredient_recipes_attributes

  has_many :ingredient_recipes, :foreign_key => "recipe_id"
  has_many :ingredients, :through => :ingredient_recipes

  accepts_nested_attributes_for :ingredient_recipes, :allow_destroy => true
end

и вторая модель:

class IngredientRecipe < ActiveRecord::Base
  attr_accessor :ingrNameFromUser

  set_primary_key :ingredient_id, :recipe_id

  attr_accessible :ingrNameFromUser, :readable_qty, :ingredient_description

  belongs_to :recipe, :foreign_key => "recipe_id"
  belongs_to :ingredient, :foreign_key => "ingredient_id"
  # belongs_to :ndbfoodde, :foreign_key => "ingredient_id"kki"

  delegate :description, :to => :ingredient, :prefix => "ingredient", :allow_nil => true

  def readable_qty
    qty.to_s + " gr."
  end

  def readable_qty=(qty)
    self.qty = qty.to_f + 2
  end
end

когда я пытаюсь получить доступ к readable_qty через вид, подобный этому:

 <% f.fields_for :ingredient_recipes do |rif| %>        
          <td>            

              <%= rif.autocomplete_field :ingrNameFromUser, recipes_autocomplete_ingredient_description_path, :value => @recipe.ingredient_recipes[i].ingrNameFromUser, :width=>1000, :size=>60 %>
          </td>  

          <td>         
          <%= rif.text_field :readable_qty %>
        </td>

Я получаю сообщение об ошибке:

undefined method `readable_qty' for #<IngredientRecipe:0x00000103322068>

Extracted source (around line #59):

56:           </td>  
57:           
58:           <td>         
59:           <%= rif.text_field :readable_qty %>
60:         </td>
61:         
62:         <td>

Кто-нибудь может увидеть, что я делаю неправильно?

Ответы [ 3 ]

0 голосов
/ 29 ноября 2010

Попробуйте добавить

attr_accessor :readable_qty

в IngredientRecipe.

0 голосов
/ 30 декабря 2010

Если вы работаете с сервером в производственном режиме и внесли это изменение в модель, то модель не будет автоматически перезагружена и новый метод не будет доступен. Вы должны перезагрузить сервер, чтобы он вступил в силу.

0 голосов
/ 29 ноября 2010

На первый взгляд, я бы сказал, что данный readable_qty является виртуальным атрибутом (т. Е. Он отсутствует в базе данных и имеет методы экземпляра как установщики и получатели, вы должны удалить его из списка attr_accessible.list определяет, какие атрибуты, хранящиеся в базе данных, могут быть обновлены массовым присваиванием.

Но readable_qty не является полем базы данных, поэтому он не принадлежит списку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...