如何在带有Mongoid的Rails4中使用Strong_Parameters,如果它在嵌套属性上抛出Unpermitt



我正试图通过将Mongoid与Rails 4.1.6一起使用,在MongoDB中使用嵌入式关系。我已经在我的用户模型中嵌入了一组位置数据,因为我将在每5分钟的间隔后添加用户的位置。

此问题是:
我可以使用IRB或MongoShell将数据添加到我的数据库中。但是当我在前端使用我的应用程序时,它不会传递嵌入的属性。最终文档只包含用户名,用户名是用户模型的字段。

我试图将user_params放在consol中,然后我看到以下错误:

于2014-10-21 05:04:04+0100开始127.0.0.1的POST"/users"用户处理控制器#创建为HTML参数:{"utf8"=>"✓","authenticity_token"=>"S5QKXuzEZID7eEjfhVWcYyLjEpi+Y3NVWt9cy/aEKOc=","user"=>{"name"=>"Appuvaa4","coord"=>{"lat"=>"40.23","long"=>"33.33","alt"=>"33.22"}},"commit"=>"创建用户"}未经许可的参数:coord


未经许可的参数:coord{"name"=>"Appuvaa4"}


我不明白为什么上面写着Unpermitted parameters:coord,但我使用了rails strong_parameters,如下所示。

请让我知道我的代码出了什么问题。

我还读到了MongoDB中的地理空间数据存储,这似乎很棒。如果有人能指导我关于如何使用嵌入式文档存储地理空间数据的任何参考或链接,我将非常感谢。因此,我将使用地理空间数据存储,而不是像这样存储数据,因为稍后我还将对存储的数据实现算法。

我想这个问题只与Strong_parameters有关,所以在这个问题解决后,如果我将其更改为mongos Geospatial也不会有问题。

`私人def user_params

   params.require(:user).permit(:name, 
                               :coords_attributes => [:lat, 
                                                      :long,:alt])
#I also Tried this 
params.require(:user).permit(:name, {:coords => [:lat, :long, :alt])
end `                                                        

但是,这两种方法对我都不起作用。以下是我的其余代码:

用户控制器

   class UsersController < ApplicationController
  before_action :set_user, only: [:show, :edit, :update, :destroy]

  def index
    @users = User.all
  end
  def show
    @users = User.all
  end
  def new
    @user = User.new
  end
  def edit
  end
  def create
    @user = User.new(user_params)
    puts '**********************************************'
    puts user_params
    puts '*****************************************'
    respond_to do |format|
      if @user.save
        format.html { redirect_to @user, notice: 'User was successfully created.' }
        format.json { render :show, status: :created, location: @user }
      else
        format.html { render :new }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end


  private
    # Use callbacks to share common setup or constraints between actions.
    def set_user
      @user = User.find(params[:id])
    end
    def user_params
        params.require(:user).permit(:name, 
                                   :coords_attributes => [:lat, 
                                                          :long, 
                                                          :alt])
    end
end

用户.rb

    class User
  include Mongoid::Document
  include Mongoid::Attributes::Dynamic
  field :name

  embeds_many :coords, class_name: "User"
  #embeds_many :locations
  accepts_nested_attributes_for :coords
   #accepts_nested_attributes_for :locations

end

Coord.rb

   class Coord
  include Mongoid::Document
  field :lat
  field :long 
  field :alt
  embedded_in :user, :inverse_of => :coords
end

_form.html.erb

    <%= form_for(@user) do |f| %>
  <% if @user.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>
      <ul>
      <% @user.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>
  <div class="field">
    <%= f.label :name %><br>
    <%= f.text_field :name %>
  </div>
  <h3>Co-ordinates</h3>
  <%= f.fields_for :coord do |c| %>
    <div class="field">
    <%= c.label :Latitude %><br>
    <%= c.text_field :lat %>
  </div>
    <div class="field">
    <%= c.label :Longitude %><br>
    <%= c.text_field :long %>
  </div>
  <div class="field">
    <%= c.label :Altitude %><br>
    <%= c.text_field :alt %>
  </div>
  <% end %>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

我不确定你是否发布了JSON。这对我发布关于我的问题的JSON起到了作用。

您有:

params.require(:user).permit(:name, 
                                   :coords_attributes => [:lat, 
                                                          :long, 
                                                          :alt])

但需要:

params.require(:user).permit(:name, {:coords => [:lat, :long, :alt]})

以下是有关该问题的其他信息。

https://github.com/rails/rails/blob/master/actionpack/lib/action_controller/metal/strong_parameters.rb#L246-L247

相关内容

  • 没有找到相关文章

最新更新