有什么区别?另外,为什么这不起作用:
未设置base_path等变量。
class Cvit < ActiveRecord::Base
attr_accessible :species,:program,:textup,:e_value,:filter,:min_identity,:cluster_dist,:fileup_file_name
attr_accessor :base_path, :fa_file, :text_file, :dbase, :source, :bl_file, :bl_sorted, :gff_file, :cvt_file, :db, :overlay_coords_gray
def initilize(*args)
super(*args)
end
def cvitSetup()
self.base_path = "blast_cvit/"
self.fa_file = "input.fa"
.
.
end
end
在rails控制台中,属性设置正确,但是当我尝试这样做时:
控制器:
def show
@cvit = Cvit.find(params[:id])
@cvit.cvitSetup()
@cvit.blast()
@cvit.generateGff()
@cvit.generateCvitImage()
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @cvit }
end
end
在我的视图中我引用了@ cvit.some_attribute.html_safe,但该属性为null,因此出现错误。有什么想法吗?
答案 0 :(得分:8)
attr_accessor
为指定的属性创建了getter method.attribute
和setter method.attribute=
。
attr_accessible
来自ActiveRecord :: Base,“指定可通过质量分配设置的模型属性的白名单。”请参阅文档和示例here。
编辑:
至于你的第二个问题,我不知道。我尝试了这个虚拟代码并且工作正常:
class Test
attr_accessor :base_path, :fa_file
def cvitSetup()
self.base_path = "blast_cvit/"
self.fa_file = "input.fa"
end
end
t = Test.new
t.cvitSetup
p t.base_path
#=> "blast_cvit/"
你确定你正确地实例化了你的课程吗?
答案 1 :(得分:1)
attr_accessor
只是为属性创建一个getter-setter方法。
attr_accessible指定可以通过质量分配设置的模型属性的白名单,例如new(属性),update_attributes(属性)或attributes =(attributes)。这已从链接here
中摘录