首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何介入Rails中创建操作

如何介入Rails中创建操作
EN

Stack Overflow用户
提问于 2012-05-15 16:16:37
回答 3查看 56关注 0票数 0

我当前使用此操作来创建对象。

代码语言:javascript
复制
def create 
  @campaign = Campaign.create(params[:campaign])
  respond_with(@campaign)
end  

由于我使用rails3-jquery-autocomplete为用户创建一个自动完成功能,以便用户输入用户名,因此我将接收字符串形式的用户名,并需要将其转换为id,以便将其保存为user_id:integer

在触发create操作之前,我不确定如何运行代码。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-15 17:09:17

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

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2012-05-15 16:23:05

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

代码语言:javascript
复制
def username
  user.name
end

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

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

同样需要说明的是,此示例依赖于jquery表单域是否使用用户名

票数 0
EN

Stack Overflow用户

发布于 2012-05-16 14:56:23

您可以在create方法中修改参数,如下所示:

代码语言:javascript
复制
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中对参数进行这种处理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10596701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档