1

同時に 2 つのオブジェクトを作成しようとしていますが、何らかの理由で 2 番目のオブジェクトのフィールドが空白になっています。

モデルは次のとおりです。

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はいっぱいです。同時に 2 つのオブジェクトを作成するためのより良い方法はありますか?

4

1 に答える 1

5

2つのフィールドは、フォームビルダーを使用して生成されますf。彼らはform_for電話の中にいるのではないかと思います。この結果、フィールド名はモデルの名前空間にネストされます。これは、フィールドのコンテンツが含まれている必要があることparams[<model name>][:longitude]を意味します。params[<model name>][:latitude]

コンソールをチェックして、Railsが受け取ったパラメーターを確認できます。または、paramsハッシュをコンソールに出力して、その内容を検査することもできます:(p paramsアクションのどこかで)。

したがって、すべてを機能させるには、適切なパラメータにアクセスする必要があります。(のようなものparams[:location][:longitude]

于 2013-01-01T20:59:54.393 に答える