Wyłuskanie id

Mam taki link w widoku:

                <li><%= link_to "Modyfikacja swojej strony " , :controller => "/sites", :action => "edit", :id => sites_user_id(current_user.id) %></li>

Model Site:

[code]class Site < ActiveRecord::Base

validates_presence_of :id_user, :on => :save

belongs_to :users, :foreign_key => “id_user”
end[/code]
Chciałbym w niższej metodzie mieć zwrócone id rekordu(ten kod jest helperze):

def sites_user_id(id) b = Site.all(:conditions => {:id_user => id}) return b.id end
Niestety ta metoda nie działa. Zwracane jest inny id(nie rekordu z bazy, tylko utworzonego obiektu).
Np zwraca 2270 zamiast 1.

Jeśli chodzi o autoryzacje to używam Devise.

Z góry dziękuje za pomoc.

Nie odpowiem na Twoje pytanie wprost, ponieważ trochę błądzisz, a chcę żebyś nauczył się jak to zrobić poprawnie. :slight_smile:

Z Twojego kodu wnioskuję, że użytkownik ma dokładnie 1 stronę. Proponuję parę zmian:

# routes.rb resource :site

[code=ERB]# widok

  • <%= link_to "Modyfikacja swojej strony " , edit_site_path %>
  • [/code] [code=Ruby]class User < ActiveRecord::Base has_one :site end

    w tabeli sites masz kolumnę user_id

    class Site < ActiveRecord::Base
    belongs_to :user
    end[/code]

    [code=Ruby]class SitesController < ApplicationController
    def edit
    @site = current_user.site
    end

    def update
    @site = current_user.site
    # …
    end
    end[/code]
    Więcej info: Singular Resources i The has_one Association.

    Nie no, odpowiedzieć na pytanie chyba można, bo to też może być pożyteczne w dalszej nauce.

    Model.all zwraca tablicę, więc b.id zwraca identyfikator obiektu Array.

    Wydaje mi się, że chodzi Ci o

    b = Site.all(:conditions => {:id_user => id}) b.map{ |site| site.id}
    Możesz też to zapisać jako

    b.map(&:id)

    O jaka szybka odpowiedź. Byłem przyzwyczajony do większych “pingów” na tym forum.

    Dziękuje za pomoc.