我当前使用此操作来创建对象。
def create
@campaign = Campaign.create(params[:campaign])
respond_with(@campaign)
end 由于我使用rails3-jquery-autocomplete为用户创建一个自动完成功能,以便用户输入用户名,因此我将接收字符串形式的用户名,并需要将其转换为id,以便将其保存为user_id:integer。
在触发create操作之前,我不确定如何运行代码。
发布于 2012-05-15 17:09:17
您可能希望使用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发布于 2012-05-15 16:23:05
您可以在用户模型中创建getter和setter方法,以便在分配时查找用户,如下所示:
def username
user.name
end
def username=(name)
self.user = User.find_by_name(name)
end如果您在用户模型中使用attr_accesible,只需确保包含:username。
同样需要说明的是,此示例依赖于jquery表单域是否使用用户名
发布于 2012-05-16 14:56:23
您可以在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中对参数进行这种处理。
https://stackoverflow.com/questions/10596701
复制相似问题