Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在rails 4中创建具有唯一用户名的报告器_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 在rails 4中创建具有唯一用户名的报告器

Ruby on rails 在rails 4中创建具有唯一用户名的报告器,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我有两个控制器: 1.记者 2.问题 在这段代码中,用户可以创建一个新的报告器,然后为每个报告器创建许多问题 Problem.rb: class Problem < ActiveRecord::Base belongs_to :reporter end 使用此代码,将创建新的reporter,但它没有唯一的用户名。 有什么想法吗?你为什么不使用 classreporter

我有两个控制器:

1.记者 2.问题

在这段代码中,用户可以创建一个新的报告器,然后为每个报告器创建许多问题

Problem.rb:

class Problem < ActiveRecord::Base
  belongs_to :reporter
end
使用此代码,将创建新的reporter,但它没有唯一的
用户名
。 有什么想法吗?

你为什么不使用

classreporter
这将确保在将报告程序保存到数据库之前,报告程序的
用户名
是唯一的


我还建议您阅读以下教程:,因为您似乎是rails新手,不知道rails的许多功能。

我想用户名验证应该是Reporter模型的一部分,而不是问题模型哦,哎呀,我复制了错误的模型。谢谢你的提醒。我已经修复了它。另外,更好的方法是确保数据库级别的唯一性,使用下面的行add_index:reporter,:user_name,unique:true生成一个新迁移。更多详情
class Reporter < ActiveRecord::Base
  has_many :problems
end
class ReportersController < ApplicationController

  def new
    @reporter = Reporter.new
    @reporters = Reporter.find(:all)
  end

  def create
      @reporter = Reporter.new(reporter_params)
      if @reporter.save
        redirect_to new_reporter_path
      end
  end

  private
  def reporter_params
    params.require(:reporter).permit(:user_name, :phone_number)
  end

end
class ProblemsController < ApplicationController

  def new
    @reporter = Reporter.find(params[:id])

    @problem = @reporter.problems.build
  end

  def create
    @reporter = Reporter.find(params[:id])
    @problem = @reporter.problems.build(problem_params)
    if @problem.save
      redirect_to new_problem_path(:id => @reporter.id)
    end
  end

  private
  def problem_params
    params.require(:problem).permit(:reporter_id, :status, :date_time, :trace_code)
  end

end
def create
    @checkreporter = Reporter.find_by(:user_name)
    if @checkreporter.blank?
      @reporter = Reporter.new(reporter_params)
      if @reporter.save
        redirect_to new_reporter_path
      end
    else
      redirect_to new_problem_path(:id => @reporter.id)
    end
  end
class Reporter < ActiveRecord::Base
  has_many :problems
  validates :user_name, uniqueness: true
end