当前位置: 首页 > 知识库问答 >
问题:

如何在创建操作中使用find_or_create?

邬承悦
2023-03-14

我想在我的游戏日期控制器中使用find_or_create方法。当参数在game_date_params时,我不知道如何在创建动作中使用该方法。任何建议如何从game_date_params中提取日期?

class GameDatesController < ApplicationController
  before_action :authenticate_user!
  before_action :authenticate_admin

  def index
    @game_dates = GameDate.all
    @showcases  = Showcase.joins(:game_dates)
  end

  def new
    @game_date = GameDate.new
    @game_date.referee_stats.build
  end

  def create
    @game_date = GameDate.new(game_date_params)
    if @game_date.save
      redirect_to showcases_path
      flash[:success] = "Game date created"
    else
      render 'new'
    end
  end

  def show
    @game_date = GameDate.find(params[:id])
  end

  def destroy
    @game_date = GameDate.find(params[:id]).destroy
    redirect_to root_url
    flash[:success] = "Game date deleted"
  end


  private

  def game_date_params
    params.require(:game_date).permit(:date, referee_stats_attributes: [ :games_count, :showcase_id ])
  end

这是POST操作的输出:

2016-04-01 10:21:44 0200开始POST“/game_dates”127.0.0.1由GameDatesController#创建为HTML参数:{“utf8”=

共有3个答案

笪德华
2023-03-14

创建动作用于在调用新动作后创建对象,更新动作用于编辑。混合创建

杨研
2023-03-14

它应该是这样的:

def create
    @game_date = GameDate.find_or_create_by(game_date_params)
    if @game_date.present?
      redirect_to showcases_path
      flash[:success] = "Game date created"
    else
      render 'new'
    end
 end
昌和悦
2023-03-14

GameDate.find_or_create_by(game_date_params) 会找到所有game_date_params的记录,因此您可以通过查找特定参数(如日期)并通过块为其分配其余属性来做到这一点。例如:

def create
  # find or initialize the record
  @game_date = GameDate.find_or_initalize_by(date: game_date_params[:date]) do |game_date|
    # Accept nested attributes as well
    game_date.assign_attributes(game_date_params)
  end

  if @game_date.save
    redirect_to showcases_path
    flash[:success] = "Game date created"
  else
    render 'new'
  end
end

另请参见:find_or_create_by和AttributesAssignment API文档

 类似资料:
  • 我想创建一个浮动动作按钮(添加项目到列表视图),就像谷歌日历,保持与Lollipop之前的Android版本(5.0之前)的兼容性。 我创建了这个布局: 活动main_activity.xml: 如何向按钮添加底纹? 我已经使用了属性提升,但不起作用

  • create 当你刚起步或者只是想要测试一些东西时,倾向于从 create() 操作符入手。它接收一个有 observer 参数的函数。在前面的一些章节中已提及过,比如 Observable 包装章节。函数签名如下: Rx.Observable.create([fn]) 示例如下: Rx.Observable.create(observer => { observer.next( 1 );

  • 问题内容: 在许多语言(和地方)中,都有一种不错的做法,即通过创建一个像这样的块来创建本地范围。 我该如何在python中实现此功能而又不会出现意外的缩进错误,也不会使用某种技巧 问题答案: 在Python中,作用域分为三种类型:全局,局部和类。您可以创建专门的“作用域”词典以传递给exec / eval()。另外,您可以使用嵌套作用域(在另一个作用域中定义一个函数)。我发现这些在我的所有代码中就

  • 问题内容: 我在詹金斯(Jenkins)有2个工作: 建立并运行单元测试 (构建并)运行集成测试 Job-2 是 Job-1 的下游项目。 Job-1 在其上启动构建并运行单元测试。 Job-2 也会启动构建并运行集成测试。 我想更改它, 并使 Job-2 在由 Job-1 启动的结果构建上运行测试。 问题答案: 您可以使用Copy Artifact插件,并使用Job-2中的Job-1工件对它们进

  • 问题内容: 我正在使用Python通过一次操作将大块文本写入文件: 如果脚本被中断,所以文件写入未完成,我希望没有文件,而不是部分完成的文件。能做到吗? 问题答案: 将数据写入临时文件,并且在成功写入数据后,将文件重命名为正确的目标文件,例如 根据文档http://docs.python.org/library/os.html#os.rename 如果成功,重命名将是原子操作(这是POSIX要求)