Pergunta

Tenho algumas fotos divididas em páginas sucessivas através do plug -in Will_Paginate. Quando você abre uma foto e depois retorna a todas as fotos usando um link, você sempre retorna à primeira página (por exemplo, a foto é exibida na página 5, você abre a foto, clica em um link para mostrar todas as fotos e esperar que você esteja ligado página 5 novamente, mas você está na página 1).

Agora, existe algum método para obter o número da página ao qual uma foto pertence?

Tentei passar um parâmetro GET, mas isso só funciona se o usuário não executar mais ações (por exemplo, postar um comentário, editar foto, ecc.).

Foi útil?

Solução

page = (number_of_records_before_RECORD / number_of_records_per_page) + 1

Em outras palavras. Se sua foto tiver 40 anos e há 25 registros antes (assumindo que alguns registros foram excluídos), com 20 registros por página:

page = (25 / 20) + 1 = 2

Você pode contar o número de registros antes do registro selecionado usando Model.count(:conditions => ['id < ?', record.id], :order => 'id'). A consulta certa depende de qual filtro de classificação você aplica a essa tabela ao listar todos os objetos.

Outras dicas

O número da página é altamente dependente dos resultados da sua pesquisa. Sua pesquisa pode ter 1, 10 ou 100 páginas, dependendo do conjunto de resultados e do número de itens por página.

Qualquer link para "Mostrar todas as fotos" pode conter as informações de pesquisa e paginação, usando os parâmetros GET como você descreveu. Ou armazenar e recuperar através de um cookie para que os resultados da pesquisa persistam até que os usuários limpem ou selecionem uma nova pesquisa.

Aqui está outra solução: Will_Paginate apenas usa parâmetros de sequência de consulta 'Search_field' e 'página'; Você pode extraí -los do hash dos parâmetros de trilhos. Se você acompanhar os que usam o estado da sessão, poderá aplicá -los novamente no código do seu controlador, quando necessário.

Exatamente como você gerencia isso dependerá do seu aplicativo. No aplicativo em que estou trabalhando, o fluxo é tal que posso distinguir entre um contexto geral e um contexto de membro. O usuário insere o contexto do membro na página de índice#do membro. Então, acabei de definir sessão [: membro_context] na entrada no contexto do membro; por exemplo, em membros#editar. Então, no índice dos membros#, tenho o seguinte código:

if session[:member_context]
  @search_field = session[:search_field]
  @page = session[:page]
  # toggle out of member context
  session[:member_context] = nil
else
  @search_field = params[:search_field]
  @page = params[:page]
  # record lastest search in case the user subsequently enters the member context
  session[:search_field] = @search_field
  session[:page] = @page
end
@members = Member.where(<use @search_field>).page(@page)
# and render ...

Isso funciona muito bem na minha aplicação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top