2012-06-19 100 views
0

所以我試圖通過表單搜索模型。基本上,我的最終目標是能夠在我的用戶模型中爲用戶指定一個值,如果此搜索設法獲得至少1個搜索結果,則只有當用戶名和密碼在組織的表單上匹配時纔會發生。在模型中搜索?

控制器:

class OrganizationsController < ApplicationController 
    def join 
     @organization = Organization.find_by_username_and_password(params[:organization]) 
    end 
end 

的觀點:

<div class="row"> 
    <div class="span6"> 

    <%= form_for(@organization) do |f| %> 

     <%= f.label :username %> 
     <%= f.text_field :username %> 

     <%= f.label :password %> 
     <%= f.password_field :password %> 

     <br /> 
     <%= f.submit "Join!", class: "btn btn-large btn-primary" %> 
    <% end %> 
    </div> 
</div> 

我不能得到這個工作。我究竟做錯了什麼? 任何幫助/建議將非常感激!

回答

1

您可以使用動態查找方法,並提供相應的屬性值進行搜索。 如

User.find_by_email_and_password '[email protected]','password' 

我們正在尋找電子郵件和pasword,在finder方法電子郵件放在第一位所以第一個參數應該是電子郵件的密碼 有趣,你可以用你的模型的屬性的任意組合來搜索

User.find_by_password_and_email 'password','[email protected]' 
值和第二

太棒了Rails :)

+0

謝謝!這很好。 –

+0

從Rails 4開始,動態查找程序方法將不再適用於多個字段。嘗試這樣的事情,以便將來可以驗證你的應用:User.where(:password =>'password',:email =>'test @ email')。 – sockmonk

1

你如何處理params的方式是不正確的。由於您使用的form_for,你在表單數據將在哈希封裝,即,則params [:組織]

organization = params[:organization] 
@organization = Organization.find_by_username_and_password(organization[:username], organization[:password]) 

不過我建議你這行代碼之前添加一個調試器你的方法和實驗自己!

+0

我似乎得到一個錯誤'未定義的方法'[]'爲零:NilClass'我做錯了什麼? –

+0

你能再詳細一點嗎?即你究竟做了什麼? – sohaibbbhatti

+0

嗯,我把你的答案寫入到我的聯合方法中的組織控制器。其他代碼是原樣的。我儘可能地改變了它,但總是歸結爲這個錯誤。並且錯誤指向'@organization = Organization.find_by_username_and_password(organization [:username],organization [:password])' –

0

根據方法名find_by_username_and_password,你必須通過兩個參數:

Organization.find_by_username_and_password('username', 'password')