ruby-on-rails – Virtus:用表单对象替换accepts_nested_attributes(一对多)

ruby-on-rails – Virtus:用表单对象替换accepts_nested_attributes(一对多),第1张

概述从一个多月以来,我试图在Rails 4中隐藏表单对象的秘密. 使用virtus,我已经能够构建非常简单的表单.但是,我无法开发一个表单对象替换在模型中的accepts_nested_attributes_for和fields_for(在表单视图中). 在this question我解释了一个小电话簿 – 例子:表格提供了一次输入一个人的姓名和3个电话号码的可能性(找到整个代码here). 现在我 从一个多月以来,我试图在Rails 4中隐藏表单对象的秘密.

使用virtus,我已经能够构建非常简单的表单.但是,我无法开发一个表单对象来替换在模型中的accepts_nested_attributes_for和fIElds_for(在表单视图中).

在this question我解释了一个小电话簿 – 例子:表格提供了一次输入一个人的姓名和3个电话号码的可能性(找到整个代码here).

现在我尝试用表单对象做同样的事情.我得到这个:

# forms/person_form_new.rbclass PersonFormNew    class PhoneFormNew        include Virtus        include ActiveModel::Model        attr_reader :phone        attribute :phone_number,String    end    include Virtus    include ActiveModel::Model    attr_reader :person    attribute :person_name,String    attribute :phone,PhoneFormNew    def persisted?        false    end    def save        if valID?            persist            true        else            false        end    endprivate    def persist        @person = Person.create(name: person_name)        @person.phones.build(:phone)    endend# vIEws/people/new.HTML.erb<h1>New Person</h1><%= form_for @person_form,url: people_path do |f| %>    <p>        <%= f.label :person_name %> </ br>        <%= f.text_fIEld :person_name %>    </p>    <p>        <%= f.fIElds_for :phone do |f_pho| %>            <%= f_pho.label :phone_number %> </ br>            <%= f_pho.text_fIEld :phone_number %>        <% end %>    <p>        <%= f.submit %>    </p><% end %>

这给了我错误

undefined method `stringify_keys’ for :phone:Symbol

line:@ person.phones.build(:phone)

但我担心,这不是唯一的错误.

你能指出我用表单对象实现一对多的赋值(最好使用Virtus)吗?

解决方法 一种解决方案是在表单模型的单独函数中创建关联对象.通过以下方式我很成功:

def persist!   @user.save!   @account.save!   create_admin_membershipenddef create_admin_membership  @membership = Membership.create! do |membership|    membership.user = @user    membership.account = @account    membership.admin = true  endend

您可以在此处找到扩展说明:http://w3facility.org/question/how-to-create-another-object-when-creating-a-devise-user-from-their-registration-form-in-rails/

总结

以上是内存溢出为你收集整理的ruby-on-rails – Virtus:用表单对象替换accepts_nested_attributes(一对多)全部内容,希望文章能够帮你解决ruby-on-rails – Virtus:用表单对象替换accepts_nested_attributes(一对多)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1269158.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存