Rails: перенаправить на показ только после отправки формы - PullRequest
2 голосов
/ 01 февраля 2012

Я следую Руководству Райана Бейтса по поисковым функциям .Я упустил реализацию алгоритма поиска прямо сейчас, только возвращая. Пока он делает то, что должен, единственная проблема в том, что теперь, когда я посещаю / posts, я автоматически перенаправляюсь в / posts / 1.

В моем посте контроллер:

  def show
  end

  def index
      @post = Post.search params[:search]
      puts ("----------------" + @post.to_s + "-----------")
      respond_to do |format|
        format.html { redirect_to @post }
      end
  end

В моем index.html.erb:

<%= form_tag posts_path, :method => 'get' do %>
  <p>
    <%= text_field_tag :search, params[:search] %>
    <%= submit_tag "Search", :name => nil %>
  </p>
<% end %>

В моем Posts.rb

def self.search(search)
  #insert search method here
  return Post.find_by_id(1)
end

Как я могу получить это, чтобы я мог посещать / сообщения и искать в моей форме без автоматического перенаправления?

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

Как только вы очистите свой Posts.search, чтобы сделать что-то реальное, это не будет иметь место. Вместо этого вы получите @posts = [] или @posts = nil иногда (в зависимости от того, что вы ищете), и это будет его собственной проблемой. В долгосрочной перспективе я думаю, что у вас должна быть логика ветвления, подобная

respond_to do |format|
  format.html { @post.present? ? redirect_to(@post) : render(:index) }
end

Кроме того, я не уверен, как Райан Бейтс делает это точно, но я всегда нахожу ценность в том, чтобы иметь модель поиска на основе ActiveModel . Если все остается просто, не беспокойтесь об этом, но приятно иметь это в своем арсенале, если поиск начинает превращаться в своего собственного зверя, напр. специальные проверки, поиск по нескольким моделям и т. д.

0 голосов
/ 01 февраля 2012

Единственный способ из вашей реализации - проверить параметры [: search]. Это было бы ноль, если вы просто пошли в / posts

 respond_to do |format|
    format.html { redirect_to @post if !params[:search].nil? }
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...