Problem z przekazaniem parametru

Chce sobie wyświetlić posty które są umieszczone w konkretnej kategorii.

z konsoli zapytanie zdaje rezultat:

Post.find(:all, :conditions => ["cat_id=?", "3"])

gorzej jest bo nie wiem jak mam przekazać to cat_id, tutaj jest 3 natomiast jak mam listę jako linki kategorii wyświetlanej z takiej pętli:

<% @listakategori.each do |listakategori| %> <%= link_to listakategori.name, listakategori %> <% end %>
gdzie wyświetlają mi się linki oczywiście do kategorii, ale konstrukcja tego linka powinna być taka żeby prowadziła do efektu wyświetlania Post.find(:all, :conditions => [“cat_id=?”, “3”]) przy czym w zależności jaką kategorię kliknę a tego już nie wiem jak zrobić :frowning:

to jak dla mnie tak samo jak wyswietlnie komentarzy ktore sa w jakims poscie, tylko inaczej to sobie nazwales, to zwykla relacja 1 do wielu, jak? railscast, blog in 15 minutes in rails 2 :smiley: gdzies w polowie.

Po pierwsze jakbyś używał angielskiego to by było łatwiej

<% @categories.each do |category| %> <%= link_to category.name, category_path(category) %> <% end %>
w routes.rb:

map.resource :category

Oczywiście musisz mieć wtedy model Category i kontroler CategoriesController.

poczytaj/pooglądaj o REST: http://www.slideshare.net/calamitas/restful-best-practices a także na http://www.railscasts.com/

[quote=sevos]<% @categories.each do |category| %> <%= link_to category.name, category_path(category) %> <% end %>
w routes.rb:

map.resource :category

[/quote]
kod powyżej wyświetli kategorie z tego co mi się wydaje. Takie coś mam. Dodaje kategorie usuwam i wyświetlam. Problem mam taki, że chce wyświetlić po kliknieciu na link kategorii wszystkie posty, które do tej kategorii należą.

a tak najlepiej to wrzuce w zip do ściągnięcia te wypociny:

http://wyslijto.pl/plik/dxqpy8qlf0

W zip? Oszalałeś? Weź to daj na githuba, pastie albo inne tego typu zabawki. Niewielu osobom będzie się chciało ściągać, rozpakowywać i otwierać w edytorze pliki :stuck_out_tongue:

ok:

jak juz pislaem obejrzyj te tworzenie bloga w 15 minut i zrob tak jak z comments tam jest

mozesz tez zrobic cos takiego:

def show
@cat = Category.find(params[:id])
@posts = Posts.find(:all, conditions => [‘cat_id = ?’, @cat.id])
end

wtedy w category/show
bedziesz mial dostep do @posts

tam dajesz

@posts.each
post…
end

i masz

mozesz zrobic sobie restowe polaczneie miedzy nimi w routach

category :has_many => posts

i wtedy partial posts generujesz i tez masz

czy tez na kilka innych moznliwosc jest tego masa, tylko obejrzyj jakis podstawowy kurs na blog railsowy

ps pisane kompletnie z palca i na odwal wiec mala szansa ze przeklejone zadziala

@cat = Category.find(params[:id])

wystarczy: jeśli jest asocjacja AR (powinna być!) Category has_many :posts, Post belongs_to :category, to potem tylko w widoku

<% @cat.posts.each do |post| %> <%= post.id %> <% end %>

@gotar, dzieki za podpowiedź,

no teraz śmiga,

w jednej z … wielu prób :slight_smile: nawet nie napisze ile ich było, to miałem taką wersję tylko robiłem błąd w miejscu gdzie jest @cat.id, bo pisałem cats.id i jakimś joins’em kombinowałem, a tu tak nie wiele trzeba było.

@Tomash, również dziekuje za poświecenie czasu

w zasadzie zagadnienie podobne więc pisze dalej,

wg tego http://railscasts.com/episodes/37-simple-search-form railscasta takie proste wyszukiwanie

Problem polega na tym, że mam w modelu:

[code=ruby]def self.search(search)

if search
find(:all, :conditions => [‘user_id LIKE ?’, “%#{search}%”])
else
find(:all)
end
end[/code]
i jest ok, no ale zamiast user_id powinno się wyszukiwać po jego loginie, a do tego dostaję się aby wyświetlić przez:

<% @gos.each do |go| %> <%=h go.user.login %> <% end %>
w kontrolerze mam:

@user = User.find(:all) @gos = Go.search(params[:search])
i jak to go.user.login wpisać zamiast user_id żeby wyszukiwać po loginie ?

[code ruby]def self.search(search)

if search
find(:all, :conditions => [‘login LIKE ?’, “%#{search}%”])
else
find(:all)
end
end[/code]

no właśnie nie widzi tej kolumny login bo jest w innej tabeli

Mysql::Error: Unknown column ‘login’ in ‘where clause’: SELECT * FROM gos WHERE (login LIKE ‘%%’)

Może coś w stylu:

[code “ruby”]User.find :all, :conditions => [‘login LIKE ? AND go_id = ?’, “%#{search}%”, self.id]

Bez self. pewnie też będzie ok[/code]

Uprzedzam, że zapis może być nieprawidłowy, napisałem tylko, co mniej więcej mam na myśli :wink:

w zasadzie trochę mi podpowiedziałeś żeby spojrzeć na to trochę inaczej i taki kod zadziałał z joinem:

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

[quote=tpl]w zasadzie trochę mi podpowiedziałeś żeby spojrzeć na to trochę inaczej i taki kod zadziałał z joinem:

if search find(:all, :conditions => ['login LIKE ?', "%#{search}%"], :joins => [:user]) else find(:all) end
[/quote]
Tylko z takim zapytaniem musisz sam przypilnować sql injection. Czyli:

  ActiveRecord::Base.connection.escape_string(search)

[quote=drogus][quote=tpl]w zasadzie trochę mi podpowiedziałeś żeby spojrzeć na to trochę inaczej i taki kod zadziałał z joinem:

if search find(:all, :conditions => ['login LIKE ?', "%#{search}%"], :joins => [:user]) else find(:all) end
[/quote]
Tylko z takim zapytaniem musisz sam przypilnować sql injection. Czyli:

  ActiveRecord::Base.connection.escape_string(search)

[/quote]
no tak, niby dobrze, ale zawsze jest jakieś coś :smiley:

Dzięki za uwagę.