我有许多表格与特定型号一对一不匹配。我一直在使用表单对象模式(或装饰器,或任何您想调用的名称)来支持这些表单,特别是当需要进行与相关模型验证不匹配的特定验证时。
例子:
class ProfileClaimRequestForm
extend ActiveModel::Naming
include ActiveModel::Conversion
include ActiveModel::Validations
attr_accessor :email, :profile
delegate :persisted?, :id, to: :profile #??
validate :matching_emails
def initialize profile, email = nil
self.profile = profile
self.email = email
end
private
def matching_emails
errors.add(:email, 'The email address entered does not match our records') unless self.email == self.profile.profile.email
end
end
为了调用它,我一直在使用form_for @form_obj, profile_claim_path(@form_obj.profile.id)
它工作正常,但是我希望我可以干掉那个路径声明。我想知道是否有一些魔术方法可以让我的表单对象响应以定义路径或类似的东西。理想情况下,我可以把它归结为form_for @form_obj
需要注意的是,我目前使用的是 Rails 3,但我们计划在可预见的将来迁移到 Rails 4。