Ruby on rails 如何在Rails中调解创建操作
我当前有此操作来创建对象Ruby on rails 如何在Rails中调解创建操作,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我当前有此操作来创建对象 def create @campaign = Campaign.create(params[:campaign]) respond_with(@campaign) end 由于我使用rails3 jquery autocomplete为用户输入用户名创建一个自动完成,因此我将用户名作为字符串接收,需要将其转换为id以将其保存为user\u id:integer 我不确定在触发create操作之前如何运行代码。您可以在用户模型中创建getter和sette
def create
@campaign = Campaign.create(params[:campaign])
respond_with(@campaign)
end
由于我使用rails3 jquery autocomplete
为用户输入用户名创建一个自动完成,因此我将用户名作为字符串接收,需要将其转换为id以将其保存为user\u id:integer
我不确定在触发
create
操作之前如何运行代码。您可以在用户模型中创建getter和setter方法,用于在分配时查找用户,如下所示:
def username
user.name
end
def username=(name)
self.user = User.find_by_name(name)
end
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
如果在用户模型中使用attr_accessible,请确保:username包含在内
同样为了澄清,这个示例依赖于jquery表单字段是否使用用户名,您可以在您的用户模型中创建getter和setter方法来查找分配时的用户,如下所示:
def username
user.name
end
def username=(name)
self.user = User.find_by_name(name)
end
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
如果在用户模型中使用attr_accessible,请确保:username包含在内
同样要澄清的是,这个示例依赖于jquery表单字段是否使用名称username您可能希望在使用Rails提供的过滤方法之前使用
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
类活动控制器
您可能希望使用Rails提供的before\u 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
类活动控制器
您可以在创建方法中修改参数,如下所示:
def username
user.name
end
def username=(name)
self.user = User.find_by_name(name)
end
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中处理参数。您可以在create方法中修改参数,如下所示:
def username
user.name
end
def username=(name)
self.user = User.find_by_name(name)
end
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所提到的,最好在:在过滤之前处理参数。在“用户id=>”myusername中接收用户名的参数是什么?“用户id=>”myusername,在“用户id=>”myusername中接收用户名的参数是什么?“用户id=>”这是一种很好的分离“参数”处理的干净方法+1.一种很好的分离“参数”处理的干净方法+1.