处理表单中的belongs_to

时间:2015-09-21 17:30:16

标签: ruby-on-rails ruby

Editx2:简短版本:我想我找到了答案:

http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-fields_for

在One-To-One标题下,我认为这就是我想要的? 如果是这样,我会把它关闭。

编辑:我在这里找到了这个:

http://railscasts.com/episodes/196-nested-model-form-part-1?autoplay=true

这接近我想要的,但它在调查中有很多东西(在我的情况下是一个小组),虽然我将有一个组的许多地址,这是在不同的区域(作为位置),但在创建组时的主要表单我有一个地址,即组的帐单地址。所以我不确定如何使表单看起来很好并更新@ group.billing_address,如下所述。

我有一个名为Group的模型,其中有一个帐单邮寄地址。此帐单邮寄地址的类型为'地址'。在组模型中,它看起来像

belongs_to  :billing_address, class_name: 'Address', foreign_key: 'billing_address_id'

在我的group_test.rb文件中,我可以非常轻松地测试此功能:

 test 'can add a billing address to a group' do
    group = Group.new
    group.group_name = 'Group test with provider'

    adr = Address.new
    adr.city = 'Las Cruces'
    adr.state = 'New Mexico'
    adr.zip = '88012'
    adr.address_line_one = '382 Dark side of moon'
    adr.address_line_two = ''
    adr.save    

    group.billing_address = adr
    group.save
    assert_not_nil group.billing_address, 'Group did not have any billing address'
  end

我的问题是如何在表单中执行上述操作?由于我的控制器group_controller.rb在new上执行此操作:

def new   
    @group=Group.new       
end

它没有做任何事情:

   def new 
    @group=Group.new       
    @group.billing_address.new 
  end

在我的视图中,表单的输入标签看起来不像:

    <table>
        <tr>
            <th>
                <%= f.label "Group Name" %>
            </th>
        </tr>
        <tr>                        
            <td>                        
                <%= f.text_field :group_name , size: 50 %>
            </td>
        </tr>
        <tr>
            <th>
                <%= f.label "Billing Address City" %>
            </th>
        </tr>
        <tr>                        
            <td>                        
                <%= f.text_field :billing_address.city, size: 50 %>
            </td>
        </tr>
    </table>

以上不起作用。我没想到它,只是试图展示我想要做的事情。甚至我的想法是对的吗?或者我必须像我在测试中那样更多地分割数据,并根据我在多个模型中找到的答案进行分析:

Rails - User Input for Multiple models on a single form - How

以这种方式获取数据并在创建或更新方法的控制器中将其重新连接在一起?

0 个答案:

没有答案