Ruby on rails 在rails 4中创建具有唯一用户名的报告器
我有两个控制器: 1.记者 2.问题 在这段代码中,用户可以创建一个新的报告器,然后为每个报告器创建许多问题 Problem.rb: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
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