Pergunta

Eu usei atributos virtuais no passado, mas eu não consigo superar isso, e eu sei a resposta é, provavelmente, me olhando na cara.

Eu tenho um modelo assim:

modelo 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

Seu controlador média andaime para

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

Erro

undefined method `confirmação =' for #

No console Booking.find_by_confirmation_token (token) com uma dada obras simbólicas perfeitamente bem.

Todas as idéias? sugestões?

Foi útil?

Solução

Eu acho que deveria ser:

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

Ou você deve attr_accessible :confirmation uncomment ou definir #confirmation e #confirmation=.

Outras dicas

O que você realmente precisa é attr_accessor: confirmação. Há uma diferença entre attr_accessible e attr_accessor.

attr_accessor :confirmation

é o mesmo que

def confirmation
  @confirmation
end

def confirmation=(value)
  @confirmation = value
end

métodos auxiliares Agora, já que ele é um padrão tão comum rubi introduzidas para isso.

Attr_accesible por outro lado é trilhos método, que marcas que certos campos podem ser massa atualizado.

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

isso funcionou ... no entanto apenas descobrindo a attr_accessible: confirmação, não. self.confirmation método indefinido ainda voltou ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top