0

私は現在、オブジェクトを作成するためにこのアクションを持っています。

def create 
  @campaign = Campaign.create(params[:campaign])
  respond_with(@campaign)
end  

ユーザーがユーザー名を入力するためのオートコンプリートを作成するために使用rails3-jquery-autocompleteしているため、ユーザー名を文字列として受け取っており、それを id に変換して として保存する必要がありますuser_id:integer

createアクションがトリガーされる前にコードを実行する方法がわかりません。

4

3 に答える 3

3

before_filterRails が提供するメソッドを使用することもできます。

class CampaignsController < ApplicationController
  before_filter :intercede, only: :create

  # some other actions here

  def create 
    @campaign = Campaign.create(params[:campaign])
    respond_with(@campaign)
  end

  private

  def intercede
    # let's do some hacking with params here
  end
end
于 2012-05-15T09:09:17.227 に答える
0

createメソッドのパラメータは次のように変更できます。

def create 
  # preprocess params
  user = User.find_by_name(params[:campaign][:user_id])
  params[:campaign][:user_id] = user.id
  # Now create the record
  @campaign = Campaign.create(params[:campaign])
  respond_with(@campaign)
end

しかし、gmileが述べたように、:before_filterでこのパラメータの処理を行う方が良いです。

于 2012-05-16T06:56:23.473 に答える
0

次のように、割り当て時にユーザーを検索する User モデルで getter メソッドと setter メソッドを作成できます。

def username
  user.name
end

def username=(name)
  self.user = User.find_by_name(name)
end

User モデルで attr_accessible を使用する場合は、:username が含まれていることを確認してください。

また、明確にするために、この例はjqueryフォームフィールドがユーザー名という名前を使用していることに依存しています

于 2012-05-15T08:23:05.070 に答える