我目前有这个动作来创建一个对象。
def create
@campaign = Campaign.create(params[:campaign])
respond_with(@campaign)
end
由于我正在使用rails3-jquery-autocomplete
创建自动填充以供用户输入用户名,我收到的用户名为字符串,我需要将其转换为id以将其保存为{{1 }}
我不确定如何在触发user_id:integer
操作之前运行代码。
答案 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。