【问题标题】:Create action inside another controller在另一个控制器中创建动作
【发布时间】:2013-09-01 16:39:30
【问题描述】:

我正在尝试在控制器内为我的请求类创建一个新用户,但遇到了一些困难。下面是我在请求控制器中的“创建”操作。我意识到我不能只调用 User.new,但不确定如何构建正确的 POST 操作。

def create
  @request = Request.new(params[:request])
  @user = User.find_by_email(@request.email)
  if @user.present?
    @request.user_id = @user.id
    @request.save
  else
    user = User.new
    user.email = @request.email
    user.zip = @request.zip
    user.save
    @request.user_id = user.id
    @request.save
  end

  respond_to do |format|
    if @request.save
      UserMailer.request_confirmation(@request).deliver
      UserMailer.request_notification(@request).deliver
      format.html { redirect_to confirmation_url }
      format.json { render json: @request, status: :created, location: @request }
    else
      format.html { render action: "new" }
      format.json { render json: @request.errors, status: :unprocessable_entity }
    end
  end
end

【问题讨论】:

  • 您是否收到任何错误消息?
  • 我是否遗漏了什么或者为什么RequestUser 具有相同的属性? (电子邮件,邮编)
  • 对了,你们这两个模型有关系吗?

标签: ruby-on-rails controller models rails-models


【解决方案1】:

我不确定您的问题是什么,但您不必调用用户创建 POST 操作(来自用户控制器的操作)来创建用户。

User.create - 'create' 是来自 ActiveRecord::Base 的方法,而不是来自 UserController。

在一个操作(例如请求创建操作)中,您可以创建多个 ActiveRecord 对象,无论它们是什么类。

有多种方法可以在 Rails 中创建数据库实体。它们可以从模型、控制器和其他人中调用。

@u = User.new
@u.save! # try to save object in DB, if something goes wrong, throws exception

@u = User.create! # creates empty user object in database, '!' causes that if something goes wrong, create throws exception

@u = User.create # it won't throw exception even if object is invalid

@u = User.new
@u.email = @request.email
if @u.save
   # ok, it's in DB
else
   # something goes wrong, e.g. rails validations
end

【讨论】:

  • 这是 Requests 控制器,而不是 User 控制器
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-24
  • 2013-10-16
  • 2010-09-29
相关资源
最近更新 更多