zaper
November 19, 2014, 4:38pm
1
Cześć mam problem z relacją
Otóż mam w tym przypadku dwie tabele.
Publisher <—Site
create_table “publishers”, force: true do |t|
t.string “name”
t.string “site”
t.string “surname”
t.string “adress”
t.string “email”
t.string “telephone”
t.datetime “created_at”
t.datetime “updated_at”
end
create_table “sites”, force: true do |t|
t.string “url”
t.string “name”
t.integer “publisher_id”
t.datetime “created_at”
t.datetime “updated_at”
end
Oraz w modelu:
class Site < ActiveRecord::Base
belongs_to : publisher (tutaj postawiłem spację specjalnie między :p)
end
Mam listę publisherów:
<% @publisher.each do |publisher|%>
<tr>
<td><%= publisher.name%></td>
<td><%= publisher.surname%></td>
<td><%= publisher.email%></td>
<td><%= publisher.adress%></td>
<td><%= publisher.telephone%></td>
<td class = "actions">
<%= link_to "Delete",publisher,:method => :delete,class: "label label-danger"%>
<%= link_to "Edit" , edit_publisher_path(publisher),class: "label label-info" %>
<%= link_to "Show" , publisher_path(publisher),class: "label label-success" %>
</td>
</tr><%end%>
Oraz show publishera w ktorym ma się mieścić site przypisany do tego publishera.
Jednak dostaje błąd:
undefined method `url’ for “Time”:String
Prosiłbym o podpowiedź
Bohdan
November 19, 2014, 5:56pm
2
@publisher.each da ci listę pól objektu @publisher .
Użyj klasę Pablisher żeby dośtać listę publisherów:
<%Publisher.all.each do |publisher| %>
zaper:
<% @publisher.each do |publisher|%>
<tr>
<td><%= publisher.name%></td>
<td><%= publisher.surname%></td>
<td><%= publisher.email%></td>
<td><%= publisher.adress%></td>
<td><%= publisher.telephone%></td>
<td class = “actions”>
<%= link_to “Delete”,publisher,:method => :delete,class: “label label-danger”%>
<%= link_to “Edit” , edit_publisher_path(publisher),class: “label label-info” %>
<%= link_to “Show” , publisher_path(publisher),class: “label label-success” %>
</td>
</tr><%end%>
zaper
November 19, 2014, 8:11pm
3
Pętla działa poprawnie , tylko jest problem , że zamiast nazwy strony(site) dostaje sam Site we wszystkich przypadkach.
<% Publisher.all.each do |pub|%>
<tr>
<td><%= pub.sites.name%></td>
<td><%= pub.sites.url%></td>
</tr><%end%>
Problem jest również , gdy chce wyświetlić pub.sites.url
undefined method `url’ for #Site::ActiveRecord_Associations_CollectionProxy:0x0000000513d198
doli
November 19, 2014, 8:49pm
4
A tam nie powinno być coś w stylu:
<% Publisher.all.each do |pub|%>
<% pub.sites.each do |site| %>
<tr>
<td><%= site.name %></td>
<td><%= site.url %></td>
</tr>
<% end %>
<%end%>
Ponownie zaczynam zaczynanie z Railsami po roku, więc możliwe, że palnąłem jakąś głupotę
zaper
November 19, 2014, 8:55pm
5
Wyświetlają się teraz poprawne wartości , tylko problem jest taki , że wyświetlają się wszystkie witryny , nawet te nie należące do danego publishera;/
A założenie jest takie , że każdy publisher ma jakieś strony przypisane do siebie. Stąd relacja belongs_to :publisher
doli
November 19, 2014, 9:08pm
6
Dałeś pętlę po wszystkich publisherach na początku, myślałem, że o to Ci chodzi. W takim razie usuń ją i zamiast pub.sites.each
daj @publisher.sites.each
czy gdzie tam trzymasz tego publishera.