ruby-on-rails – Rails表单 – 我应该在Controller,Model还是Vi
问题
我有一个parent_ented_attributes_for父母的父母.所以,当我有一个父表单时,我需要构建子表,所以我也可以为它显示表单字段.我想知道的是:我应该在哪里建立孩子?在模型,视图或控制器中? 为什么我要问这个 你可能会摇头,认为我是一个疯子,因为他提出了这样的问题,但这里的思路让我在这里. 我有一个Customer模型,接受billing_adted_attributes_for billing_address,如下所示: class Customer belongs_to :billing_address,class_name: 'Address' accepts_nested_attributes_for :billing_address end 当我向用户提供新客户的表单时,我想确保有一个空白的billing_address,以便用户实际看到billing_address的字段.所以我的控制器中有这样的东西: def new @customer = Customer.new @customer.build_billing_address end 但是,如果用户未填写任何billing_address字段,但尝试提交无效表单,则会向他们显示一个不再包含billing_address字段的表单,除非我在create action中添加了类似的内容我的控制器: def create @customer = Customer.new(params[:customer]) @customer.build_billing_address if @customer.billing_address.nil? end 还有另一个问题,即如果用户尝试编辑客户,但该客户尚未拥有关联的billing_address,则他们将看不到billing_address的字段.所以我必须向控制器添加这样的东西: def edit @customer = Customer.find(params[:id]) @customer.build_billing_address if @customer.billing_address.nil? end 类似的东西需要在控制器的更新方法中发生. 无论如何,这是高度重复的,所以我想在模型中做一些事情.我最初的想法是为模型的after_initialize事件添加一个回调,如下所示: class CustomerModel after_initialize :build_billing_address,if: 'billing_address.nil?' end 但我的蜘蛛般的感觉开始刺痛.谁能说我将来不会在我的代码的其他部分实例化客户,并以某种意想不到的方式造成严重破坏. 所以我目前的想法是,最好的地方是在表单视图本身,因为我想要完成的是为表单创建一个空白的billing_address,表单本身是我知道的代码中唯一的位置我肯定要为billing_address显示一个表单. 但是,你知道,我只是互联网上的一些人.我应该在哪里build_billing_address? 解决方法
尽管Xavier Shay的
this advice是2011年,但他建议将其置于视图中,“因为这是一个视图问题(我们是否显示字段?)”:
应用程序/佣工/ form_helper.rb: module FormHelper def setup_user(user) user.address ||= Address.new user end end 应用程序/视图/用户/ _form.html.erb: <%= form_for setup_user(@user) do |f| %> 请注意,我必须将帮助方法更改为以下内容: def setup_user(user) user.addresses.build if user.addresses.empty? user end 控制器保持完全不变. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Swift 2中的新@convention(c):我该如何使用它?
- 【从零开始学习Oracle数据库】(1)建表与简单查询
- vb.net – 如何在Visual Studio 2010中构建64位Visual Basi
- ruby-on-rails – 工作原理 – “belongs_to:user,depende
- c中的多态性,父类向量中的类型丢失
- 在cocos2dx 中添加自定义 shaders --- 改变 HSL 色调,饱和度
- 报表XML导出rtf格式,结果在浏览器中打开XML文件。下载rtf文
- Part III. 核心技术-7. IOC容器-7.4 依赖关系
- 单一内核、微内核
- 选择整数数组数组的每个第一个元素到数组