我想要text_field
,我想在此设置3 validation
。在这text_field
我得到了记者的电话号码。每位记者has_one
reporterprofile
。我想当记者输入他的phone_number时,我检查validates_numericality_of
和validates_length_of
如果这两个都是真的,那么检查uniqueness validation
,如果这个phone_number
是新的,那没关系,我通过此新reporterprofile
创建redirect_to
和reporterprofile
id
,但如果此phone_number
存在,我希望页面为redirect_to
此{{ 1}}没有创建新的记者。
reporterprofile
reporter.rb
class Reporter < ActiveRecord::Base
has_one :reporterprofile
before_create :build_reporterprofile
validates :phone_number, uniqueness: true
validates_numericality_of :phone_number
validates_length_of :phone_number, :minimum => 11, :maximum => 11
end
reporters_controller.rb
我可以def create
@reporter = Reporter.new(reporter_params)
respond_to do |format|
if @reporter.save
format.html { redirect_to edit_reporterprofile_path(:id => @reporter.reporterprofile), notice: 'Reporter was successfully created.' }
format.json { render action: 'show', status: :created, location: @reporter }
else
if
format.html { render action: 'new' }
format.json { render json: @reporter.errors, status: :unprocessable_entity }
end
end
end
end
redirect_to edit_reporterprofile_path
无法保存,但如果我执行此操作,则reporter
和numerically
验证不会检查。我怎样才能length
他的个人资料中存在的记者?
答案 0 :(得分:0)
我首先填充validates
方法,而不是现在的方法。这将消除对您拥有的其他两种方法的依赖性,这应该解决一些问题:
validates :phone_number,
length: { is: 6 },
numericality: true,
uniqueness: true
答案 1 :(得分:0)
首先,检查是否存在具有给定电话号码的Reporter。如果是这样,请重定向到reporterprofile路径。否则,创建新的记者。有各种方法可以组织逻辑来处理这个问题。在这里,所有这些都被推到了记者控制者的“创造”行动中。
def create
existing_reporter = Reporter.includes(:reporterprofile).find_by(phone_number: reporter_params[:phone_number])
if existing_reporter
redirect_to reporterprofile_path(existing_reporter.reporterprofile)
else
@reporter = Reporter.new(reporter_params)
respond_to do |format|
if @reporter.save
format.html { redirect_to edit_reporterprofile_path(:id => @reporter.reporterprofile), notice: 'Reporter was successfully created.' }
format.json { render action: 'show', status: :created, location: @reporter }
else
if
format.html { render action: 'new' }
format.json { render json: @reporter.errors, status: :unprocessable_entity }
end
end
end
end
end