2013-07-12 28 views
0

我有一個模型Aulas,它有一個模型課程的令牌字段。 當我拯救Aula時,我想提取令牌的名稱並保存到Aula的名字中,這可能嗎? 因此,而不是 「aula.course.name」 我可以對 「aula.name」將令牌信息保存到另一個表中

模型

class Aula < ActiveRecord::Base 
    attr_accessible :name,:course_tokens 

    has_many :menagements 
    has_many :courses, :through => :menagements 

    attr_reader :course_tokens 

    def course_tokens=(tokens) 
    self.course_ids = Course.ids_from_tokens(tokens) 
    end 
end 

class Course < ActiveRecord::Base 
    attr_accessible :aula_id, :name 
    has_many :menagements 
    has_many :aulas, :through => :menagements 

    def self.tokens(query) 
    courses = where("name like ?", "%#{query}%") 
    if courses.empty? 
     [{id: "<<<#{query}>>>", name: "New: \"#{query}\""}] 
    else 
     courses 
    end 
    end 

    def self.ids_from_tokens(tokens) 
    tokens.gsub!(/<<<(.+?)>>>/) { create!(name: $1).id } 
    tokens.split(',') 
    end 
end 

發生了。控制器

def create 
    @aula = Aula.new(params[:aula]) 

    respond_to do |format| 
     if @aula.save 
     format.html { redirect_to @aula, notice: 'Aula was successfully created.' } 
     format.json { render json: @aula, status: :created, location: @aula } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @aula.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

我試過同一個名字:

def do_something_before_save 
self.name = self.courses.each do 
end 

我得到

--- - !ruby/object:Course attributes: id: 1 name: Extra 2B aula_id: 11 created_at: 2013-03-08 13:26:15.806995000 Z updated_at: 2013-03-14 19:58:53.542650000 Z 

但我試試這個,它顯示了同樣的結果

def do_something_before_save 
self.name = self.courses.each do |course| 
    course.name 
end 

的信息是存在的,我只是鴕鳥政策似乎得到它。我想要的部分是額外2B

+0

看看這裏http://guides.rubyonrails.org/active_record_callbacks.html –

回答

0

您可以添加一個before_save回調,它會在保存Aula類之前觸發一個方法。

喜歡的東西:

class Aula < ActiveRecord::Base 
    ... 

    before_save :do_something_before_save 

    def do_something_before_save 
    self.name = self.course.name 
    end 
    ... 
end 
+0

這很好。但現在的問題是,我如何從令牌獲取名稱?我無法通過'self.course.name'得到,我得到了''的undefined method'course'。 :/我嘗試了一堆代碼,但沒有resoults。如果我做'self.courses.name'我得到'課程'作爲resoult,而不是它的名字 – Allan

+0

我試過'self.name = self.courses.each做end',我得到'--- - !ruby /對象:課程屬性:id:1名稱:Extra 2B aula_id:11 created_at:2013-03-08 13:26:15.806995000 Z updated_at:2013-03-14 19:58:53.542650000 Z'但我試着去做| course.name'並顯示相同的結果。 – Allan

+0

信息在那裏,我似乎沒有得到它。我想要的部分是'額外2B' – Allan

0

我fugured因爲它是一個數組,我應該指定一個我當然要顯示的信息,所以我也

def do_something_before_save 
    self.name = self.courses.first.name 
    end 

首先是指定一個課程我想要的信息。

感謝您的幫助。