2015-10-05 57 views
0

我在驗證時遇到了一些問題。我試圖驗證不屬於數據庫的params [:search]和params [:miles]。到目前爲止,我已經創建了一個無表模型,但仍然需要一些幫助來找出我的代碼出了什麼問題。感謝你的幫助傢伙。在軌道上驗證搜索表單

user_controller.rb

class UsersController < ApplicationController 
    def index 
    @search = Search.new(search: params[:search], miles: params[:miles]) 


    if params[:search] && params[:miles].present? 
    @users = User.near(params[:search], params[:miles], units: :mi) 
    elsif params[:search].present? 
    @users = User.near(params[:search], 10, units: :mi) 
    else 
    @users = User.all 
    end 

index.html.erb

<%= form_for @search, url: users_path, method: :get do |f| %> 
    <% if @search.errors.any? %> 
     <h2> Errors: </h2> 
     <ul> 
     <% @search.errors.full_messages do |message| %> 
      <li><%= message %></li> 
     <% end %> 
     </ul> 
    <% end %> 
    <%= f.label :miles, params[:miles] %> 
    <%= f.text_field :miles %> 
    <%= f.label :search, params[:search] %> 
    <%= f.text_field :search %> </br > 
    <%= f.submit "Search" %> 
    <% end %> 

search.rb模型

class Search 
    include ActiveModel::Validations 
    include ActiveModel::Conversion 
    extend ActiveModel::Naming 

    attr_accessor :search 
    attr_accessor :miles 

    validates_presence_of :search 
    validates :miles, inclusion: { in: 0..9 } 
end 
+0

您的代碼在哪裏失敗?搜索錯誤沒有顯示?你有沒有遇到某種錯誤? – Roko

+0

由於您沒有提及您的錯誤,因此很難理解正在發生的事情。 – Roger

回答

1

所以用戶進入索引頁面,並填寫搜索字段:searchmiles 然後點擊Search併到達索引控制器,其中新的搜索被創建:@search = Search.new

在您的代碼中沒有任何位置搜索是「給定」用戶填充的參數。

你不應該這樣做:

@search = Search.new(search: params[:search], miles: params[:miles])

@search = Search.new 
@search.search = params[:search] 
@search.miles = params[:miles] 

,然後爲驗證開始,你需要 '激活' 他們不知何故,像@search.valid?這應該觸發驗證過程

+0

你是對的,但我現在得到這個錯誤 - 錯誤的參數數量(1爲0) – Ray

+0

更新我的答案,當你得到一個錯誤,請指出發生錯誤的元素,我假設它發生在Search.new – Roko

+0

感謝您解決了我現在需要在驗證部分工作的錯誤問題 – Ray