在rails 4中使用唯一的user_name创建记者

时间:2014-03-27 22:04:58

标签: ruby-on-rails ruby-on-rails-4

我有2个控制器:

1.reporter 2.problem

在此代码中,用户可以创建新的记者,然后为每个记者创建许多问题。

Problem.rb:

class Problem < ActiveRecord::Base
  belongs_to :reporter
end

Reporter.rb

class Reporter < ActiveRecord::Base
  has_many :problems
end

Reporter_controller.rb

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

Problem_controller.rb

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

我不希望用户能够使用数据库中已存在的user_name创建新的报告者(唯一user_name)。我在reporter_controller.rb中更改了create操作,如下所示,但它无法正常工作。

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

使用此代码,即可创建新的报告者,但它没有唯一的user_name。 有什么想法吗?

1 个答案:

答案 0 :(得分:2)

为什么不使用validations

class Reporter < ActiveRecord::Base
  has_many :problems
  validates :user_name, uniqueness: true
end

这可确保在将该记者保存到您的数据库之前,您的记者的user_name是唯一的。

我还建议您阅读以下教程:http://guides.rubyonrails.org/getting_started.html,因为看起来您对rails很新,并且不了解它的一些功能。