【问题标题】:Create two object at the same time同时创建两个对象
【发布时间】:2013-01-01 20:51:35
【问题描述】:

我正在尝试同时创建两个对象,但由于某种原因,我的第二个对象的字段为空白。

模型是:

Users: id, name, last, email, password ...
Locations: address, longitude, latitude.

关系是这样的:

User has_many location
Location belongs_to users

事件控制器创建方法:

def create
    @event = current_users.events.build(params[:event])
    @location = @event.locations.build(params[:location])
    @location.longitude = params[:longitude]
    @location.latitude = params[:latitude]
    respond_to do |format|
      if @location.save
        @location.longitude = params[:longitude]
        @location.latitude = params[:latitude]
        if @location.save
          if @event.save
            format.html { redirect_to @event, notice: 'Event was successfully created.' }
            format.json { render json: @event, status: :created, location: @event }
          else
            format.html { render action: "new" }
            format.json { render json: @event.errors, status: :unprocessable_entity }
          end
        end
      end
    end
  end

还有形式:

  <%= f.hidden_field :latitude %>
  <%= f.hidden_field :longitude %>

但是当我创建我的位置时,longitudelatitude 是空白的,但我的 event_id 已填满。有没有更好的方法同时创建两个对象?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 geocoding


    【解决方案1】:

    您的两个字段是使用表单生成器f 生成的。我怀疑他们在form_for 电话中。这样做的结果是字段名称将嵌套在模型的命名空间中。这意味着params[&lt;model name&gt;][:longitude]params[&lt;model name&gt;][:latitude] 应该有字段的内容。

    您可以检查控制台以查看 rails 收到了哪些参数。或者,您可以将 params 哈希打印到控制台以检查其内容:p params(在您的操作中的某处)。

    因此,为了让一切正常运行,您需要访问正确的参数。 (类似于params[:location][:longitude]

    【讨论】:

    • @YvesSenn 的意思是你应该使用params[:location][:longitude] 而不是params[:location]
    • 在将这个虽然未定义的方法 `[]' 用于 nil:NilClass 时出现新错误,但我可以看到参数经度和纬度已正确提交
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    相关资源
    最近更新 更多