如何修改使用建模生成的模型?例如,myModel模型原来有a、b、c列,但我现在想添加d列。 最佳答案 Rails3及更高版本使用以下代码:railsgeneratemigrationadd_fieldname_id_to_tablenamefieldname:stringrails2rubyscript/generatemigrationadd_fieldname_to_tablenamefieldname:string这不再有效并在Rails3中返回以下错误:ruby:Nosuchfileordirectory--script/
关于在模块或库中使用“SELF”的快速问题。基本上,“SELF”的范围/上下文是什么,因为它属于模块或库,如何正确使用它?有关我所说内容的示例,请查看随“restful_authentication”一起安装的“AuthenticatedSystem”模块。注意:我知道“self”在其他语言中等同于“this”,以及“self”如何在类/对象上运行,但是在模块/库的上下文中,“self”没有任何意义。那么在没有类的模块之类的东西中,self的上下文是什么? 最佳答案 在模块中:当您在实例方法中看到self时,它指的是包含该模块的类的
关闭。这个问题是opinion-based.它目前不接受答案。想改善这个问题吗?更新问题,以便可以通过editingthispost用事实和引文回答问题.3年前关闭。Improvethisquestion我不确定这里的最佳实践是什么,但我经常看到缩写的变量名,尤其是当范围很小的时候。所以(使用简单的Ruby示例)而不是defadd_location(name,coordinates),我看到类似defadd_loc(name,coord)的东西——我什至可能会看到类似defadd_loc(n,x,y)的东西.我想当人们习惯于看到缩写时,更长的名字可能会让他们感到疲倦。冗长是否有助于可读
这不是Rails特有的——我只是以Rails为例。我在Rails中有一个模型:classItem(假设Item模型(类)有一个名为name的方法。)我什么时候需要使用self.name我什么时候可以只使用name(例如,#{name})? 最佳答案 在调用方法时更喜欢省略self.是惯用的;通常不需要。调用setter方法时,您必须使用self.foo=xxx,而不是foo=xxx,以便Ruby意识到您没有尝试创建新的局部变量。同样,如果您有一个与方法同名的现有局部变量do_something,这不太可能发生,您必须使用self.d
extendself和module_function是实现它的两种ruby方法,因此您可以在模块上调用方法,如果包含该模块也可以调用它。这些方式的最终结果有什么不同吗? 最佳答案 module_function将给定的实例方法设为私有(private),然后复制并将它们作为公共(public)方法放入模块的元类中。extendself将所有实例方法添加到模块的单例中,保持它们的可见性不变。moduleMextendselfdefa;endprivatedefb;endendmoduleNdefc;endprivatedefd;e
在Rails模型中测试getter/setter对时,我发现了一个很好的行为示例,我一直认为这种行为很奇怪且不一致。在这个例子中,我处理的是classFolder.Folderbelongs_to:parent,:class_name=>'Folder'在getter方法上,如果我使用:defparent_nameparent.nameend……或者……defparent_nameself.parent.nameend...结果完全一样,我得到了父文件夹的名称。但是,在getter方法中,如果我使用...defparent_name=(name)parent=self.class.fi
谁能给我解释一下在方法定义中添加self是什么意思?是不是类似于java中的this关键字? 最佳答案 与其他语言不同,Ruby没有类方法,但它有附加到特定对象的单例方法。cat=String.new("cat")defcat.speak'miaow'endcat.speak#=>"miaow"cat.singleton_methods#=>["speak"]defcat.speak创建附加到对象cat的单例方法。当你写classA时,它等同于A=Class.new:A=Class.newdefA.speak"I'mclassA"e
这RubyStyleGuide告诉我们最好使用self.method_name而不是classmethod_name。但是为什么?classTestClass#badclass是否存在性能问题? 最佳答案 class善于将所有类方法放在同一个block中。如果在defself.method中添加方法form则不能保证(除了惯例和一厢情愿的想法)不会有额外的类方法隐藏在文件的后面。defself.method擅长显式声明方法是类方法,而使用class你必须自己去找容器。这些中哪一个对您来说更重要是一个主观决定,并且还取决于诸如有多少其
据我对self的理解,它指的是类的当前实例。这不是一直以来的默认行为吗?例如,不是self.var_one=method(args)相当于var_one=method(args)如果是这样,self有什么用? 最佳答案 有几个重要的用途,其中大部分基本上是为了消除实例方法、类方法和变量之间的歧义。首先,这是定义类方法的最佳方式:classFoodefself.bar"classmethodbar"enddefbar"instancemethodbar"endendFoo.bar#returns"classmethodbar"foo=
Rubysetter——无论是由(c)attr_accessor创建的或手动——似乎是唯一需要的方法self.在类本身中访问时的限定。这似乎让Ruby在语言世界中独树一帜:所有方法都需要self/this(像Perl,我认为是Javascript)没有方法需要self/this是(C#,Java)只有setter需要self/this(ruby?)最好的比较是C#与Ruby,因为这两种语言都支持在语法上像类实例变量一样工作的访问器方法:foo.x=y,y=foo.x.C#称它们为属性。这是一个简单的例子;Ruby和C#中的相同程序:classAdefqwerty;@q;end#manu