Есть ли способ сделать это без 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: Все еще работаю над этим. Может использовать рендер..?
Вы можете просто использовать, 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