سؤال

لقد استخدمت السمات الافتراضية في الماضي ولكن يبدو أنني لا أستطيع تجاوز ذلك، وأعلم أن الإجابة ربما تحدق في وجهي.

لدي نموذج مثل ذلك:

تأكيد النموذج.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 %>

...

الطرق.rb

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

خطأ

طريقة غير محددة `تأكيد =' لـ #

في وحدة التحكم، يعمل Booking.find_by_confirmation_token(token) باستخدام رمز مميز بشكل جيد تمامًا.

أيه أفكار؟اقتراحات؟

هل كانت مفيدة؟

المحلول

أعتقد أنه يجب أن يكون إما:

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

أو يجب عليك إلغاء التعليق attr_accessible :confirmation أو تحديد #confirmation و #confirmation=.

نصائح أخرى

ما تحتاجه حقًا هو attr_accessor :confirmation.هناك فرق بين attr_accessible و attr_accessor.

attr_accessor :confirmation

هو نفسه

def confirmation
  @confirmation
end

def confirmation=(value)
  @confirmation = value
end

الآن نظرًا لأنه نمط شائع، فقد قدمت روبي طرقًا مساعدة لذلك.

ومن ناحية أخرى، فإن Attr_accesible هو طريقة Rails، التي تشير إلى أنه يمكن تحديث حقول معينة بشكل جماعي.

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 :confirmation، لم يحدث ذلك.لا يزال التأكيد الذاتي يُرجع طريقة غير محددة...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top