如何在Rails中创建动作

时间:2012-05-15 08:16:37

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

我目前有这个动作来创建一个对象。

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

由于我正在使用rails3-jquery-autocomplete创建自动填充以供用户输入用户名,我收到的用户名为字符串,我需要将其转换为id以将其保存为{{1 }}

我不确定如何在触发user_id:integer操作之前运行代码。

3 个答案:

答案 0 :(得分:3)

您可能希望使用Rails提供的before_filter方法。

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

答案 1 :(得分:0)

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

def username
  user.name
end

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

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

另外要澄清一下,这个例子依赖于jquery表单字段使用名称username

答案 2 :(得分: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所提到的那样,最好在下面执行params处理:before_filter。