2017-02-21 12 views
-1

В моем приложении RoR я разрешаю пользователям выбирать контакты, на которые они хотят отправить электронное письмо. Пользователи выбирают эти контакты с помощью флажков в форме. Я пытаюсь добавить функциональность поиска, чтобы пользователь мог искать по имени и только флажки с контактами, соответствующими этому поиску.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> 

Если переменная @contacts экземпляр имеет контакты вернулся из поиска в контроллере.

Когда пользователь нажимает кнопку поиска, необходимо вызвать действие контроллера.

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_search метод, который в модели Contact.rb:

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

Я не могу понять, почему это не работает, может кто-то пожалуйста, помогите?

+1

Какой маршрут отправляется? Где происходит ошибка? –

+0

показать полную ошибку msg as-is для нас, чтобы найти, что происходит. – uday

+0

Я только что добавил полную ошибку –

ответ

1

По Еврорадио, я предполагаю, что у вас есть form_tag внутри form_for блока ... Вы не можете сделать это

Когда вы нажмете Submit, действие происходит в первой форме действия ... что, вероятно, является создание

это лучше переместить ваш form_tag наружу ваш предыдущий form блока ...

0

Кажется, ваше имя модального (Useraccount) неверно, это должно быть UserAccount.

Также Обратите внимание

Когда мы используем where запрос с ActiveRecord модальный мы никогда не получим объект NIL, если мы не имеем неправильное имя Modal.

Смежные вопросы