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

您可以在 User 模型中创建 getter 和 setter 方法来查找分配的用户,如下所示:

def username
  user.name
end

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

如果您在用户模型中使用 attr_accesible,请确保包含 :username。

还要澄清一下,此示例依赖于 jquery 表单字段使用名称 username

于 2012-05-15T08:23:05.070 回答
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 回答