2017-02-21 27 views
-1

私のRoRアプリケーションでは、電子メールを送信する連絡先をユーザーが選択できるようにしています。ユーザーは、フォームのチェックボックスを使用してこれらの連絡先を選択します。私は検索機能を追加しようとしているので、ユーザはファーストネームで検索でき、その検索に一致する連絡先のチェックボックスのみが表示されます。 @contactsインスタンス変数は、コントローラ内の検索から返された連絡先を保持している場合はRuby on Rails:検索が機能しないのはなぜですか?

<div class="form-group"> 
    <label>From Email Address</label></br> 
    <% @useraccounts.each do |useraccount| %> 
     <%= f.radio_button :account_id, useraccount.account_id, :checked => false %> 
     <%= f.label :account_id, useraccount.account.email, :value => "true" %><br> 
    <% end %> 
</div> 
<div class="form-group"> 
    <%= form_tag '/emails/contact_search', :method => 'get' do %> 
     <p> 
     <%= text_field_tag :search_string, params[:search_string], :placeholder => "Search by firstname" %> 
     <%= submit_tag "Search", :name => nil %> 
     </p> 
    <% end %> 
    <label>Contacts</label></br> 
    <%= f.collection_check_boxes :contact_ids, @contacts, :id, :fullname %> 
</div> 

:私はビュー上でこのコードを使用しようとしています。これを行うために

ユーザが検索ボタンをクリックすると、以下のコントローラアクションが呼び出されます。

def contact_search 
    @email.recipients.build 
    @useraccounts = Useraccount.where(user_id: session[:user_id]) 
    @contacts = Contact.contacts_search(params[:search_string]) 
    if @contacts.empty? 
     flash.now[:alert] = "There are no contacts with that name." 
     @contacts = Contact.all 
    end 
    render :action => "new" 
end 

このコントローラのアクションがContact.rbモデルであるcontact_search方法、使用しています。

def self.contact_search(search_string) 
    self.where("firstname LIKE ?", search_string) 
end 

を私はまた、ルートでcontact_searchを持っている:

post 'emails/contact_search', :to => 'emails#contact_search' 
get 'emails/contact_search', :to => 'emails#contact_search' 

しかし、いくつかのために理由は、ユーザーが検索をクリックすると、フォームにNoMethodError in Emails#createundefined method 'each' for nil:NilClassが表示されます。エラーは写真と同じです。

enter image description here

これが動作しない理由を私は仕事ができない、誰かが助けてくださいすることができますか? ERBによって

+1

どのようなルートがディスパッチされていますか?エラーはどこで発生しますか? –

+0

は、エラーメッセージをそのまま表示し、何が起きているのかを特定します。 – uday

+0

私はちょうどフルエラー –

答えて

1

は、私はあなたが提出ヒットすると

すると、アクションは最初のフォームアクションに起こっていることを行うことはできません...あなたがform_forブロック内form_tagを持っていると思います...それはおそらくそれは

0

があなたのモーダル名(Useraccount)が間違っている、これはでなければならないようだ...あなたの前のformブロック外にごform_tagを移動する方が良いでしょう

を作成しています。私たちはActiveRecordのでwhereクエリを使用する場合

はまた、我々が間違ったモーダル名を持っていない限り、我々はNILオブジェクトを取得することはありませんモーダル

に注意してください。

関連する問題