bde*_*vic 1 ruby attributes model ruby-on-rails accessor
有什么不同?另外,为什么这不起作用:
没有设置诸如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
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
在我看来,我引用@ cvit.some_attribute.html_safe,但该属性为null,因此我收到错误.有任何想法吗?
attr_accessor为指定的属性创建getter method.attribute和setter method.attribute=.
attr_accessible来自ActiveRecord :: Base和"指定可通过质量分配设置的模型属性的白名单".请参阅此处的文档和示例.
编辑:
至于你的第二个问题,我不知道.我尝试了这个虚拟代码并且它有效:
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/"
Run Code Online (Sandbox Code Playgroud)
你确定你正确地实例化了你的课程吗?