проблемы виртуальных атрибутов с неопределенными методами - PullRequest
0 голосов
/ 16 сентября 2009

Я использовал Виртуальные атрибуты в прошлом, но, похоже, я не могу обойти это, и я знаю, что ответ, вероятно, смотрит мне в лицо.

У меня есть такая модель:

модель Confirmation.rb

class Confirmation < ActiveRecord::Base

  #attr_accessible :confirmation, :confirmation_token
  #attr_accessible :confirmation_token

  def confirmation_token
    confirmation.confirmation_token if confirmation
  end

  def confirmation_token=(token)
    self.confirmation = Booking.find_by_confirmation_token(token)
  end

end

Ваш средний контроллер лесов для

confirmations_controller.rb

  def new
    @confirmation = Confirmation.new(:confirmation_token => params[:confirmation_token])

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @confirmation }
    end
  end

new.html.erb

<h1>New confirmation</h1>

<% form_for(@confirmation) do |f| %>
  <%= f.error_messages %>

    <%= f.hidden_field :confirmation_token %>

...

routes.rb

  map.confirmation "confirmation/:confirmation_token", :controller => "confirmations", :action => "new"
  map.resources :confirmations

ошибка

неопределенный метод `Подтверждение = 'для #

В консоли Booking.find_by_confirmation_token (токен) с данным токеном работает отлично.

Есть идеи? предложения?

Ответы [ 3 ]

5 голосов
/ 17 сентября 2009

Что вам действительно нужно, так это attr_accessor: подтверждение. Есть разница между attr_accessible и attr_accessor.

attr_accessor :confirmation

совпадает с

def confirmation
  @confirmation
end

def confirmation=(value)
  @confirmation = value
end

Теперь, так как это обычный шаблон, ruby ​​представил вспомогательные методы для этого.

Attr_accesible, с другой стороны, является методом rails, который отмечает, что некоторые поля могут быть массово обновлены.

2 голосов
/ 16 сентября 2009

Я думаю, что это должно быть либо:

def confirmation_token=(token)
    @confirmation = Booking.find_by_confirmation_token(token)
end

Или вы должны раскомментировать attr_accessible :confirmation или определить #confirmation и #confirmation=.

0 голосов
/ 16 сентября 2009
class Confirmation < ActiveRecord::Base
  belongs_to :bookings

  #attr_accessible :confirmation, :confirmation_token
  #attr_accessible :confirmation

  def confirmation_token
    @confirmation.confirmation_token if @confirmation
  end

  def confirmation_token=(token)
    @confirmation = Booking.find_by_confirmation_token(token)
  end

end

это сработало ... однако просто раскрытие attr_accessible: подтверждение, нет. self.confirmation по-прежнему возвращает неопределенный метод ...

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