2016-04-08 3 views
0

Цель, которую я пытаюсь достичь, - дать пользователю возможность щелкнуть по кнопке, которая обновится до фильтра страницы, который будет искать. Моя страница посвящена музыкальным исполнителям, и она понравится, когда пользователь выбирает «Поп», что страница обновляется, показывая только «поп-исполнителей».Rails - обновляющая страница с новыми записями в таблице

Вот HTML + рубин, который я использую для отображения художников:

<% #prints the artists that match the search, prints all for empty search %> 
     <% @artists.each_slice(3) do |artists| %> 
      <div class="row"> 
       <% artists.each do |artist| %> 
        <div class = "artist_images"> 
         <%= link_to image_tag(artist.artist_art, class: 'show_image'), artist_path(artist) %><br/><br/> 
        </div> 
       <% end %> 
      </div> 
     <% end %> 

     <% #prints message showing that the search does not match %> 
     <% if [email protected]? %> 
     <h3><center style = "color: white">There are no artists containing the term(s) "<%= params[:search] %>". Please try 'Adele', 'Drake', 'Kanye West', or 'Taylor Swift'</center></h3> 
     <% end %> 

Контроллер имеет следующие методы:

def index 
    @artists = Artist.all 
    end 

    def randomPop 
    @artists = Artist.where(:genre => "\nPop").random(9) 
    end 

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

+0

Я не уверен , но вам придется использовать другой сервер, например Faye, для динамического запроса данных с помощью WebSocket, как и в асинхронном приложении (например, в приложении для чата). Или используйте AJAX. – EvilTak

+0

Вы хотите, чтобы вся страница обновилась или сделана по AJAXy? –

+0

@Petr Gazarov, страница довольно маленькая, так что все обновления будут в порядке – QQPrinti

ответ

2

на ваш взгляд,

<%= button_to "Pop", artists_path, method: :get, params: { artist_genre: "Pop" } %> 

в контроллере,

def index 
    if params[:artist_genre] 
    @artists = Artist.where(:genre => params[:artist_genre]).random(9) 
    else 
    @artists = Artist.all 
    end 
end 
+0

Я чувствую, что это, наверное, ответ, но я все еще ничего не получаю – QQPrinti

+0

Ничего, нашел проблему, это был нечетный синтаксический разбор строки. Большое спасибо! – QQPrinti

1

Этот классический railscast episode is on point. Я бы использовал это для настройки вашего окна поиска. Единственное, что вы можете изменить/обновление:

if search 
    find(:all, :conditions => ['name LIKE ?', "%#{search}%"]) 
else 
    find(:all) 
end 

Если, вероятно, будет where положение на основе вашей ситуации»

if search 
    where("genre = ?", your_genre) 
else 
    all 
end 
Смежные вопросы