gpt4 book ai didi

ruby-on-rails - Rails 3 find_or_create_by

转载 作者:数据小太阳 更新时间:2023-10-29 07:17:15 28 4
gpt4 key购买 nike

我正在关注 http://railscasts.com/episodes/102-auto-complete-association

一切似乎都很好。我正在尝试即时创建发票和客户。它确实有效。一切都很酷。

客户所属帐户发票所属帐户发票属于_to client

但是,两个模型(客户和发票)都有一个强制属性:account_id。

当我尝试动态创建新客户端时出现错误 :client_id: - can't be blank

我收到此错误的原因是无法创建客户,因为它需要客户模型中的 account_id。如果我在客户模型中删除此行 validates :account_id, :presence => true,则会添加发票,但客户没有 account_id。

我确实在创建操作的 clients_controller.rb 中设置了默认值 @client.account_id = current_user.account_id

发票.rb

validates :account_id, :presence => true
validates :client_id, :presence => true

def client_name
client.name if client
end

def client_name=(name)
self.client = Client.find_or_create_by_name(name) unless name.blank?
end

最佳答案

检查这些关于 Rails 3.x 的 ActiveRecord 查询接口(interface)的文章:

http://guides.rubyonrails.org/active_record_querying.html (参见“15 Dynamic Finders”部分)

http://m.onkey.org/active-record-query-interface

您需要先创建帐户,然后是客户,然后是发票 - 否则您的验证将失败。

最好通过他们的 parent 创建客户和发票,例如:

a = Account.find( current_user.account_id )

c = a.clients.create(:name => "new client")
a.save # better "save" than sorry ;-)

c.invoices.create(:invoice_date => Time.now)
c.save

我建议使用 Rails 控制台在您的开发数据库中使用它,这样您就可以感受到它。

关于ruby-on-rails - Rails 3 find_or_create_by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7665624/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com