Просмотреть изменения «при отправке» Rails

0

Есть ли способ сделать это без javascript?

Позволь мне объяснить. У меня две модели, пользователи и собаки.

Я использую индекс как домашнюю страницу, когда пользователи вошли в систему.

Существует форма, которая ищет собак (не по какой-либо информации, которую вводит пользователь, она предварительно заполнена данными собаки), но индекс перечисляет результат моего поискового запроса при загрузке страницы. Я бы хотел, чтобы он показывался только при нажатии кнопки.

Я покажу код.

контроллер для собаки:

def index
  if current_user
    @user = current_user
    @breed = @user.dogs.first.primarybreed
    # params[:search] = @breed
    @dog = Dog.search(params[:search]).sample
  end
end

Посмотреть:

%= form_tag dogs_path, :method => :get do %>
<%= hidden_field_tag :search, @breed %>
<%= image_submit_tag("/images/greenadd.png", size: "10x10", :name => nil) %> New Doggy Playdate!
<% end %>
<div id="dogswrap">

<h1><%= current_user.dogs[0].name %> Should Meet With...</h1>

<table>
<tbody>
  <tr>
    <td><%= image_tag @dog.image.url(:medium) %></td>
    <td><%= @dog.name %></td>
    <td><%= @dog.nick %></td>
    <td><%= @dog.primarybreed %></td>
    <td><%= @dog.secondarybreed %></td>
    <td><%= @dog.age %></td>
    <td><%= @dog.weight %></td>
    <td><%= link_to "#{@dog.user.name}" %> </td>
    <td><%= image_tag @dog.user.image.url(:thumb) %> </td>

    </td>
    </tr>
</tbody>
</table>

Модель

 def self.search(search)
    find(:all, :conditions => ['primarybreed LIKE ?', "%#{search}%"])
 end

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

Если есть другой способ сделать это, я буду признателен.

Благодарю!

EDIT: Все еще работаю над этим. Может использовать рендер..?

Теги:
simple-form

1 ответ

1
Лучший ответ

Вы можете просто использовать, where вместо того, как вы сейчас это делаете, find и conditions

def self.search(search)
  where('primarybreed LIKE ?', "%#{search}%")
end

Одна вещь, которую я узнал при использовании функции LIKE в разработке для SQLite3 и LIKE в PostgreSQL для производства, был LIKE без учета регистра в SQLite3, но не для PSQL. Для этого вам нужно использовать ILIKE.

К вашему главному вопросу. Вот как я это сделаю.

def index
  if current_user
    @user = current_user
    @dogs = Dog.search(params[:search]) if params[:search].present?
  end
end

Для вас взгляды, начните перемещать все в частичное. _form.html.erb и _dog.html.erb

форма

<%= form_tag dogs_path, :method => :get do %>
  <%= text_field_tag :search %>
  <%= image_submit_tag("/images/greenadd.png", size: "10x10", :name => nil) %> New Doggy Playdate!
<% end %>

собака

<td><%= image_tag dog.image.url(:medium) %></td>
<td><%= dog.name %></td>
<td><%= dog.nick %></td>
<td><%= dog.primarybreed %></td>
<td><%= dog.secondarybreed %></td>
<td><%= dog.age %></td>
<td><%= dog.weight %></td>
<td><%= link_to "#{dog.user.name}" %> </td>
<td><%= image_tag dog.user.image.url(:thumb) %></td>

Извещение удалено @dog и заменено dog

Просмотр индексов

<%= render 'form' %>
<div id="dogswrap">

<h1><%= @user.dogs[0].name %> Should Meet With...</h1>

<table>
<tbody>
  <tr>
    <% if @dogs %>
      <%= render @dogs %>
    <% end %>
  </tr>
</tbody>
</table>

изменил current_user.dogs[0].. на @user.dogs[0].. Также сделал условным, если @dogs экземпляра @dogs является правдивой. Если это так, то рендер отобразит часть _dog.html.erb для каждой собаки в коллекции @dogs

Ещё вопросы

Сообщество Overcoder
Наверх
Меню