我似乎记得在某个地方读取如果没有更改属性(可能是作为活动记录脏的一部分),rails将不会提交到数据库就是这种情况?我似乎无法找到它,并且通过源代码快速查看并不是明智之举.
如果这是假的,我需要使用before_save回调,因为我想根据是否发生了更改来运行一些代码.
我假设after_save与脏数据将无法正常工作?
我无法解决这个问题。使用文档
我有两个模型
class Region < ActiveRecord::Base
extend FriendlyId
has_many :pages
friendly_id :name, :use => :slugged
end
class Page < ActiveRecord::Base
extend FriendlyId
belongs_to :region
friendly_id :name, :use => :scoped, :scope => :region
end
Run Code Online (Sandbox Code Playgroud)
根据文档,这应该可以工作。但是,当我创建一个页面时,它不会通过范围创建一个 slug,这意味着当我创建另一个同名页面时,我会收到重复索引错误。
在模型中使用方法时,是否可以将条带错误消息呈现为anotices.这是我的控制者
def create
@donation = @campaign.donations.create(donation_params)
if @donation.save_with_payment
redirect_to @campaign, notice: 'Card charged successfully.'
else
render :new
end
end
Run Code Online (Sandbox Code Playgroud)
我的方法是这样的
def save_with_payment
customer = Stripe::Customer.create(
:email => email,
:card => stripe_token
)
charge = Stripe::Charge.create(
:customer => customer.id,
:amount => donation_amount,
:description => 'Rails Stripe customer',
:currency => 'usd'
)
end
Run Code Online (Sandbox Code Playgroud)
我注意到其他人的exmaples条纹有一个
rescue Stripe::error
rescue Stripe::InvalidRequestError => e
Run Code Online (Sandbox Code Playgroud)
但我不知道如何抓住这些错误然后将它们放在通知中
任何帮助表示感谢
我目前有以下方法:
def complete?
attributes.delete_if{|k,v| k == 'id' or k == 'user_id'}.values.each do |value|
return false if value.blank?
end
true
end
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法呢?我只是想知道,在我的实例中,是否已将所有属性与id和user_id区分开来.必须有更好的方法来做到这一点.
我在rails 3和ruby 1.9.3上(只是因为人们不会给出适用于较新版本的答案)