2013-01-01 93 views
1

我想在同一時間創建兩個對象,但由於某種原因,我的第二個對象的字段爲空。同時創建兩個對象

的車型有:

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已滿。有沒有更好的方法來同時創建兩個對象?

回答

5

您的兩個字段是使用表單生成器f生成的。我懷疑他們在撥打form_for。其結果是字段名將嵌套在模型的名稱空間中。這意味着params[<model name>][:longitude]params[<model name>][:latitude]應該具有該字段的內容。

您可以檢查您的控制檯以查看通過導軌接收了哪些參數。或者,您可以將params散列打印到控制檯以檢查其內容:p params(您的操作中的某處)。

所以爲了讓所有的東西都能正常工作,你需要訪問正確的參數。 (類似於params[:location][:longitude]

+0

@YvesSenn說的是你應該使用'params [:location] [:longitude]'而不是'params [:location]' – Khaled

+0

當我把這個undefined undefined方法'[]'nil:NilClass,但我可以看到參數的經度和緯度已正確提交 – Jseb

相關問題