Domanda

Ho usato gli attributi virtuali in passato ma non riesco a superarlo, e so che probabilmente la risposta mi sta fissando in faccia.

Ho un modello così:

modello 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

Il controller dell'impalcatura medio per

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

Errore

metodo non definito `confirm = 'per #

Nella console Booking.find_by_confirmation_token (token) con un determinato token funziona perfettamente.

Qualche idea? suggerimenti?

È stato utile?

Soluzione

Penso che dovrebbe essere:

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

Oppure dovresti decommentare attr_accessible: conferma o definire #confirmation e # confirm = .

Altri suggerimenti

Ciò di cui hai veramente bisogno è attr_accessor: conferma. C'è una differenza tra attr_accessible e attr_accessor.

attr_accessor :confirmation

è uguale a

def confirmation
  @confirmation
end

def confirmation=(value)
  @confirmation = value
end

Ora, poiché è un modello così comune, il rubino ha introdotto metodi di supporto per questo.

Attr_accesible d'altra parte è il metodo rails, che segna che alcuni campi possono essere aggiornati in massa.

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

questo ha funzionato ... comunque solo scoprire l'attr_accessible: conferma, no. la conferma automatica ha comunque restituito un metodo indefinito ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top