我有一个模特Aulas,它有一个模拟课程的标记字段。 当我保存Aula时,我想在令牌中提取课程的名称并保存到Aula的名称中,这可能吗? 因此,我可以在“aula.name”
上使用相同的名称而不是“aula.course.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
信息在那里,我似乎没有得到它。我想要的部分是 Extra 2B
答案 0 :(得分: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
答案 1 :(得分:0)
我觉得因为它是一个数组,我应该指定一个我想要显示信息的课程,所以我做了
def do_something_before_save
self.name = self.courses.first.name
end
首先是指定我想要信息的一门课程。
感谢您的帮助。