Como encontrar e exibir um grupo de objetos com uma tag específica utilizando atua como taggable (redux)?
-
06-07-2019 - |
Pergunta
Eu quero mostrar uma lista de artigos na view show da minha tag. Eu estou usando o age como plug-in redux taggable em um aplicativo de Rails 2.3.2 e SQLite3. Eu tenho até o exemplo básico me leva, a atribuição de tags e em seguida, exibindo uma lista deles com o artigo.
Agora eu quero exibir uma lista de artigos que pertencem a uma tag, mas obter o seguinte erro:
undefined method `article' for #<Tag id: 1, name: "various", taggings_count: 1>
Modelos
/article.rb
class Article < ActiveRecord::Base
acts_as_taggable
end
/user.rb
class Tag < ActiveRecord::Base
acts_as_tagger
end
Controlador
/tags_contoller.rb
def show
@tag = Tag.find(params[:id])
@articles = @tag.articles
end
Ver
/tags/show.html.erb
<% for article in @articles %>
...
<% end %>
Aqui está um link para o arquivo de migração .
Muito obrigado.
Solução 3
Muito obrigado a Geemus, autor de atos como redux taggable para explicar isso para mim.
Para exibir uma lista de artigos com uma tag específica Eu só precisava mudar o tags_controller de:
/tags_contoller.rb
def show
@tag = Tag.find(params[:id])
@articles = @tag.articles
end
para:
Controlador /tags_contoller.rb
def show
@tag = Tag.find(params[:id])
@articles = @tag.tagged
end
Outras dicas
Eu acredito que o plugin não é o único culpado aqui, é sqlite que está trazendo-lhe problemas. Eu encontrei este antes - parece sqlite não pode compreender 'nome_da_tabela.nome_da_coluna' sintaxe, mesmo que ele não é mencionado no site. No meu caso eu só mudou para MySQL, ea coisa toda foi sem problemas. Ver se isso ajuda.
O problema é que você tem um modelo chamado de objeto. Dê-lhe um nome que não tem nenhuma sobreposição com as classes de sistema de Ruby, como applicationObject ou mediaobject.
Eu poderia especular sobre o motivo que está causando os problemas que é, mas seria apenas especulação. aulas abertas é uma característica maravilhosa de Ruby, mas significa que você precisa ter cuidado para nomear suas classes por isso eles são distintos de Ruby e aulas de trilho.