私の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#create
undefined method 'each' for nil:NilClass
が表示されます。エラーは写真と同じです。
これが動作しない理由を私は仕事ができない、誰かが助けてくださいすることができますか? ERBによって
どのようなルートがディスパッチされていますか?エラーはどこで発生しますか? –
は、エラーメッセージをそのまま表示し、何が起きているのかを特定します。 – uday
私はちょうどフルエラー –