如何在嵌套属性的Rails表单上显示数据 - Mongoid

时间:2014-08-22 11:40:41

标签: ruby-on-rails ruby-on-rails-4 mongoid mongoid3

我有这样的模特:

class User

    include Mongoid::Document
    include Mongoid::Timestamps
    include ActiveModel::SecurePassword

    ...
    field :import_settings,     :type => Hash,          default: lambda { default_values }

    def default_values
        {
            hosts:      '',
            port:       '',
            database:   '',
            user:       '',
            password:   ''
        }
    end

end

我的表格看起来像这样:

<%= form_for(@user, {:url => admin_path, :controller => 'stactic_pages', :action => 'update_import'}) do |f| %>

      <%= render 'shared/error_messages' %>

      ...

      <%= f.fields_for :import_settings do |p| %>

          <%= p.label :hosts %>
          <%= p.text_field :hosts %>

          <%= p.label :port %>
          <%= p.text_field :port, placeholder: :port %>

      <% end %>

      <%= f.submit 'Save changes', class: 'btn btn-large btn-primary' %>

<% end %>

一切正常,我可以收集/保存/更新数据,但是在前端没有显示散列中的数据(以前保存过的数据)。有什么想法吗?

顺便说一句,在我的控制器上我确实有以下内容:

    @user = current_user
    if @user.update_attribute(:import_settings, params[:user][:import_settings])
        flash[:success] = 'Details saved'
        redirect_to admin_path
    else
        flash[:error] = 'An error happened'
    end

这是一个自定义控制器,仅更新部分用户详细信息。 (不是用户的主要编辑页面)。

1 个答案:

答案 0 :(得分:0)

更新您的代码

<%= f.fields_for :import_settings do |p| %>

<%= f.fields_for @user.import_settings do |p| %>