我一直无法在Rails中找到关于.build方法的任何文档(我目前正在使用2.0.2).
通过实验,似乎您可以使用构建方法has_many在保存记录之前将记录添加到关系中.
例如:
class Dog < ActiveRecord::Base
has_many :tags
belongs_to :person
end
class Person < ActiveRecord::Base
has_many :dogs
end
# rails c
d = Dog.new
d.tags.build(:number => "123456")
d.save # => true
Run Code Online (Sandbox Code Playgroud)
这将正确地保存带有外键的狗和标签.这似乎不适用于某种belongs_to关系.
d = Dog.new
d.person.build # => nil object on nil.build
Run Code Online (Sandbox Code Playgroud)
我也试过了
d = Dog.new
d.person = Person.new
d.save # => true
Run Code Online (Sandbox Code Playgroud)
Dog在这种情况下未设置外键,因为在保存时,新人没有id,因为它尚未保存.
我的问题是:
如何构建工作,以便Rails足够聪明,弄清楚如何以正确的顺序保存记录?
我怎样才能在belongs_to关系中做同样的事情?
我在哪里可以找到有关此方法的任何文档?
谢谢
我试图获得两个不同时间实例的小时差异.我从DB获取这些值作为:datetime列
如何在忽略或舍入分钟的同时将其包括在计算中的月份和年份?这只能手动完成还是有功能吗?
我试图找出如何将键和值对从一个过滤器过滤到另一个过滤器
例如,我想采取这个哈希
x = { "one" => "one", "two" => "two", "three" => "three"}
y = x.some_function
y == { "one" => "one", "two" => "two"}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助
编辑:应该提一下,在这个例子中,我希望它表现为白名单过滤器.也就是说,我知道我想要什么,而不是我不想要的.
我在尝试创建远程跟踪分支时遇到此错误
git co -b release_2.6 origin/release_2.6
warning: refname 'origin/release_2.6' is ambiguous.
warning: refname 'origin/release_2.6' is ambiguous.
fatal: Ambiguous object name: 'origin/release_2.6'.
Run Code Online (Sandbox Code Playgroud)
我只用release_2.6定义了这两个引用
git show-ref | grep "release_2.6"
a71b2da1526f73862464a23aceaa1939a8b1ace2 refs/heads/origin/release_2.6
ed1399936a8cc4cd2feed1851123af861b0ff093 refs/remotes/origin/release_2.6
Run Code Online (Sandbox Code Playgroud)
有谁知道这个错误意味着什么?
干杯
使用puppet存储和处理敏感信息并将其安全地分发到节点的最佳方法是什么?
我使用的版本是2.7.
一个例子是数据库密码.应用程序服务器上需要纯文本密码.
如何存储这些而不会让他们躺在木偶脚本里面?
如果更新包含对特定列的更改,是否可以使postresql限制/阻止对特定记录的更新?
这将如何实施.触发/约束?实现这一目标的最有效方法是什么?
我使用的是9.1版
我在尝试销毁活动记录实例时遇到问题.
它涉及以下AR
class Client < ActiveRecord::Base
has_many :phone_numbers, :dependent => :destroy
has_many :email_addresses, :dependent => :destroy
has_many :user_clients , :dependent => :destroy
has_many :users, :through => :user_clients
end
class UserClient < ActiveRecord::Base
belongs_to :user
belongs_to :client , :dependent => :destroy
has_many :instructions, :dependent => :destroy
end
Run Code Online (Sandbox Code Playgroud)
在客户端实例上执行销毁时,我收到以下错误
@dead_man = Client.find(params[:id])
@dead_man.destroy => uninitialized constant UserClient::Instruction
Run Code Online (Sandbox Code Playgroud)
我真的不确定这个错误来自哪里.任何帮助是极大的赞赏!
我正在创建一个Web应用程序,它使用Rails内置帮助程序函数向站点添加ajax功能.我不希望用户能够在没有JS的情况下使用该应用程序,因为它无法正常运行.
我需要能够阻止这种情况.如何在没有JS的情况下阻止用户加载我的任何页面?
我试图在我的布局中使用标签.这会检测到JS的缺失但仍会呈现视图.将脚本标记放在yield附近会阻止呈现任何视图.
关于如何做到这一点的任何想法?
我想创建一个具有一个方法的类,该方法调用不在超类中的所有其他方法.
有没有办法我可以使用obj.methods来获取非祖先方法?或者还有另一种方法可以完全实现.
谢谢
我的问题是关于这个AR及其实例变量@saved
class PhoneNumber < ActiveRecord::Base
has_one :user
validates_presence_of :number
def self.create_phone_number( user, phone_hash )
@new_phone = PhoneNumber.new(phone_hash)
@user = user
PhoneNumber.transaction do
@user.phone_numbers << @new_phone
@new_phone.save!
@user.save!
end
@saved = true
return @new_phone
rescue ActiveRecord::RecordInvalid => invalid
@saved = false
return @new_phone
end
def saved?
@saved ||= false
end
end
Run Code Online (Sandbox Code Playgroud)
我的理解是,实例变量将通过实例的存在来保持它们的值.
在我的控制器中使用此AR时,保存了吗?总是返回false ..
@phone_number = PhoneNumber.create_phone_number(@active_user, params[:phone_number])
puts "add_phone_number"
if @phone_number.saved? => always false
Run Code Online (Sandbox Code Playgroud)
关于这些实例变量我缺少什么?谢谢
activerecord ×3
ruby ×3
constants ×1
foreign-keys ×1
git ×1
hashmap ×1
inheritance ×1
javascript ×1
methods ×1
postgresql ×1
puppet ×1
reference ×1
security ×1
time ×1