2014-03-27 56 views
0

我有2個控制器:創建記者在軌獨特USER_NAME 4

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中的創建操作,如下所示,但它無法正常工作。

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。 任何想法?

回答

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並且不知道它的許多功能。

+0

我想user_name驗證應該是Reporter模型的一部分,而不是問題模型 – Monideep

+1

哦,哎呀,我複製了錯誤的模型。感謝@deep的領導。我修復了它。 –

+1

另外,它更好地確保數據庫級別的唯一性,並使用以下行add_index:reporter,:user_name,unique:true生成新的遷移。有關http://ruby.railstutorial.org/chapters/modeling-users#sec-uniqueness_validation的更多詳細信息 – Monideep