我有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
。
有什么想法吗?
答案 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很新,并且不了解它的一些功能。