誰かが下記の 'send()'メソッドをどのように使っているのか理解してもらえますか?下のコードは、私がそれを読んでいるとき、それが何の目的であるのか理解できません。Rails 100%newb issue - send()メソッド
Ruby 1.8.7とRails 1.2.3を使用したRailsアプリです。アップグレードについて私を賞賛してはいけません。それはクライアントの環境なので、そんな余暇はありません。
言うまでもなく、私が言及しているステートメントはこのようです。これはに含まれている
def do_schedule
@performance = Performance.new(params[:performance])
@performer = Performer.find(params[:performer_id])
selected_track = params[:selected_track]
if FileTest.exists?(File.expand_path(@performer.photo))
@performance.photo = File.open(File.expand_path(@performer.photo))
end
@performance.audio = File.open(File.expand_path(@performer.send(selected_track)))
if @performance.save
flash[:notice] = 'Performer scheduled.'
redirect_to :controller => :performer, :action => :index
else
render :action => 'schedule'
end
end
出演モデル
class Performer < ActiveRecord::Base
file_column :audio_one
file_column :audio_two
file_column :audio_three
file_column :photo
belongs_to :festival
validates_presence_of :name, :first_name, :last_name, :address, :city, :state, :zip, :daytime_phone, :availability, :stages
validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
validates_confirmation_of :email
validates_presence_of :audio_one, :audio_two, :audio_three, :photo, :if => :submitted
after_create :salt_access_key
serialize :availability
serialize :stages
attr_accessor :other_type_of_music
before_save :set_other_type
def set_other_type
if type_of_music == 'Other'
self.type_of_music = "Other - #{other_type_of_music}" unless other_type_of_music.blank?
end
end
def salt_access_key
update_attribute(:access_key, Digest::SHA1.hexdigest("--#{self.id}--#{self.name}--#{self.festival.year}"))
end
def preferred_stages
stages = []
festival = Festival.find(self.festival_id.to_i)
self.stages.collect { | key, value |
id = key.gsub(/[\D]/, '').to_i
if id > 0
stages << festival.performance_stages.find(id).name
end
}
return stages
end
end
コントローラがパフォーマンスです。私は、@ performer.send(selected_track)が実際に何をしているのか把握しようとしているが、私はジェット機に漕ぐように感じている。
誰かがこのことをよりよく理解できるように助けてくれますか?
ありがとうございました。
ありがとうctcherry!素晴らしい例!あなたが作成したmethod_missingリファレンスについては、いいえ、Performerクラスには実際には4つのメソッドしかありません。 3(index、show、&destroy)とプライベートlookup_festivalです。それは送信が適切に動作することができないことを意味しますか? – Skittles
送信は引き続き機能します。それが引き起こすのは 'selected_track'変数がそれに渡されているかどうかに依存します。あなたはそれを記録し、私たちにそれを示すことができ、私たちはあなたにもっと多くの情報を与えることができます。 – ctcherry
また、パフォーマーのモデルやコントローラーを見ていますか?このsend callの問題のモデルコードを見たいと思っています。 – ctcherry