我正在使用rails,我想这样做attr_accessor :politics,默认设置为false.
有谁知道如何做到这一点,能够用简单的术语解释它吗?
我在我的类中动态创建了一个实例变量:
class Mine
attr_accessor :some_var
def intialize
@some_var = true
end
def my_number num
self.instance_variable_set "@my_#{num}", num
end
end
Run Code Online (Sandbox Code Playgroud)
我@my_#{num}现在如何制作attr值?
例如,我希望能够这样做:
dude = Mine.new
dude.my_number 1
dude.my_1
=> 1
Run Code Online (Sandbox Code Playgroud) 我知道我可以编写attr_accessor:tag_list来为Rails中的对象创建一个虚拟属性tag_list.这允许在对象的表单中存在tag_list属性.
如果我使用attr_accessor:tag_list,我可以在模型中对tag_list执行操作以从表单中提取和操作数据.
我想知道的是,而不是写attr_accessor,我怎么会写一个getter和setter,将完全复制的attr_accessor默认功能.例如:
def tag_list
#what goes here
end
Run Code Online (Sandbox Code Playgroud)
仅供参考我尝试过
def tag_list
@tag_list
end
Run Code Online (Sandbox Code Playgroud)
这不起作用.
ruby ruby-on-rails virtual-attribute attr-accessor ruby-on-rails-3
使用以下代码在后台会发生什么?
class User < ActiveRecord::Base
attr_accessor :name
attr_accessible :name
end
Run Code Online (Sandbox Code Playgroud)
提示:实例化类时,是否会持久化到数据库?为什么或者为什么不?
我正在尝试从散列(使用嵌套散列)生成attr_reader,以便它自动镜像instance_variable创建.
这是我到目前为止:
data = {:@datetime => '2011-11-23', :@duration => '90', :@class => {:@price => '£7', :@level => 'all'}}
class Event
#attr_reader :datetime, :duration, :class, :price, :level
def init(data, recursion)
data.each do |name, value|
if value.is_a? Hash
init(value, recursion+1)
else
instance_variable_set(name, value)
#bit missing: attr_accessor name.to_sym
end
end
end
Run Code Online (Sandbox Code Playgroud)
但我找不到办法做到这一点:(
只是想知道是否有人能够在Ruby on Rails中对getter setter的基础知识进行一些了解,并提供强类型视图.我对rails上的ruby非常新,并且主要对.NET非常了解.
例如,我们假设我们有一个名为Person的.net类
class Person
{
public string Firstname{get;set;}
public string Lastname{get;set;}
public Address HomeAddress{get;set;}
}
class Address
{
public string AddressLine1{get;set;}
public string City{get;set;}
public string Country{get;set;}
}
Run Code Online (Sandbox Code Playgroud)
在Ruby中,我会写这个
class Person
attr_accessor :FirstName
attr_accessor :LastName
attr_accessor :HomeAddress
end
class Address
attr_accessor :AddressLine1
attr_accessor :City
attr_accessor :Country
end
Run Code Online (Sandbox Code Playgroud)
查看Person类的Ruby版本如何指定访问器方法FirstName,LastName和HomeAddress的类型?如果我要使用这个类,我可以将任何类型提供给HomeAddress,但我希望这个访问器方法只接受TYPE地址.
有什么建议 ?
谢谢
在我的linux开发环境中使用S3设置回形针非常容易 - 一切都是开箱即用的.但是,我无法让它在Heroku上工作.
当我尝试上传时,日志显示:
Processing ItemsController#create (for 72.177.97.9 at 2010-08-26 16:35:14) [POST]
Parameters: {"commit"=>"Create", "authenticity_token"=>"0Hy3qvQBHE1gvFVaq32HMy2ZIopelV0BHbrSeHkO1Qw=", "item"=>{"photo"=>#<File:/home/slugs/270862_4aa601b_4b6f/mnt/tmp/RackMultipart20100826-6286-1256pvc-0>, "price"=>"342", "name"=>"a new item", "description"=>"a new item", "sold"=>"0"}}
Paperclip::PaperclipError (Item model missing required attr_accessor for 'photo_file_name'):
Run Code Online (Sandbox Code Playgroud)
我找到了一篇引用此错误的博文,并说它将此添加到我的模型中:
attr_accessor :photo_file_name
attr_accessor :photo_content_type
attr_accessor :photo_file_size
attr_accessor :photo_updated_at
Run Code Online (Sandbox Code Playgroud)
这确实使得缺少attr_accessor所需的模型'photo_file_name'错误消失了,但它仍然不起作用.请参阅我的其他问题了解详情.正如我已经发现,随着attr_accessor行添加到我的模型中,即使在我的开发系统上,上传也会失败,我怀疑这不是正确的答案.
我刚刚对等效的getter/setter方法测试了attr_accessor:
class A
# we define two R/W attributes with accessors
attr_accessor :acc, :bcc
# we define two attributes with getter/setter-functions
def dirA=(d); @dirA=d; end
def dirA; @dirA; end
def dirB=(d); @dirB=d; end
def dirB; @dirB; end
end
varA = A.new
startT = 0
dirT = 0
accT = 0
# now we do 100 times the same benchmarking
# where we do the same assignment operation
# 50000 times
100.times do
startT = Time.now.to_f
50000.times do |i|
varA.dirA = …Run Code Online (Sandbox Code Playgroud) 我如何在rails 4中使用虚拟属性(getter,setter),因为'attr_accessible'已被删除.
我在这里遇到问题
def tags_list
@tags = self.tags.collect(&:name).join(', ')
end
Run Code Online (Sandbox Code Playgroud)
在尝试更新/创建时,我可以达到上述方法,但无法达到下面的setter.
def tags_list=(tags)
@tags = tags
end
Run Code Online (Sandbox Code Playgroud) ruby-on-rails virtual-attribute attr-accessor ruby-on-rails-4
我想创建大量的属性,如果用这样的方法调用构造,可以轻松完成,
attr_accessor :attr_list
def attr_list
[:x1, :y1, :x2, :y2]
end
Run Code Online (Sandbox Code Playgroud)
这不起作用.有没有其他方法来实现这一目标?
任何帮助将不胜感激.
attr-accessor ×10
ruby ×6
accessor ×1
amazon-s3 ×1
attr ×1
benchmarking ×1
field ×1
heroku ×1
paperclip ×1