Asocjacje

Witam,

mam dwie tabele users i things

chciałabym wyświetlić dane z ich obu jednocześnie dla konkretnej thing + mieć możliwość operacji na tych danych (policzenie VATu)

Chyba, że jest jakiś lepszy sposób aby wyświetlić fakturę?

Czyli user ma wiele thingów, czy jak? Daj jakieś modele jak to masz zdefiniowane. Wróżek dziś nie ma na forum

Przepraszam - napisałam jak osioł.

User ma wiele thingów ale ja chcę wyświetlić tylko thinga o numerze X i jego dane oraz dane usera, który ten thing zakupił.

Modele:

user.rb

[code]class User < ActiveRecord::Base
has_many :things, :dependent => :destroy

validates :name, :presence => true
validates :name, :length => { :minimum => 2, :too_short => “Conajmniej %{count} znaki musi zawierać nazwa firmy” }
validates :nip, :presence => true
validates :nip, :length => { :is => 10, :wrong_length => “%{count} cyfer musi zawierać NIP” }
validates :nip, :numericality => { :only_integer => true }
validates :street, :presence => true
validates :street, :length => { :minimum => 2, :too_short => “Conajmniej %{count} znaki musi zawierać nazwa ulicy” }
validates :zip, :presence => true
validates :zip, :length => { :is => 6, :wrong_length => “%{count} znaków musi zawierać kod pocztowy” }
validates :city, :presence => true
validates :city, :length => { :minimum => 2, :too_short => “Conajmniej %{count} znaki musi zawierać nazwa miasta” }
validates :password, :confirmation => true
validates :email, :uniqueness => true

Include default devise modules. Others available are:

:token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable

devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable

Setup accessible (or protected) attributes for your model

attr_accessible :email, :password, :password_confirmation, :remember_me, :nip, :name, :street, :zip, :city

attr_accessible :title, :body

def to_label
“#{name}”
end

end[/code]
thing.rb

[code]class Thing < ActiveRecord::Base
belongs_to :user, :readonly => true
attr_accessible :amount, :cost, :date_start, :text

validates :text, :presence => true
validates :text, :length => {
:minimum => 2,
:maximum => 25,
:tokenizer => lambda { |str| str.scan(/\w+/) },
:too_short => “Tekst musi zawierać co najmniej %{count} słowa”,
:too_long => “Tekst zawierać co najwyżej %{count} słów”
}
#validates_inclusion_of :date_start, :in => DateTime.civil(Date.today)…DateTime.civil(2020,1,1)

validates :amount, :presence => true
validates :date_start, :presence => true

end[/code]
baza danych

[code] create_table “things”, :force => true do |t|
t.string “text”
t.integer “amount”
t.datetime “created_at”, :null => false
t.datetime “updated_at”, :null => false
t.integer “user_id”
t.date “date_start”
t.boolean “done”
t.string “cost”
t.string “emission”
end

create_table “users”, :force => true do |t|
t.string “email”, :default => “”, :null => false
t.string “encrypted_password”, :default => “”, :null => false
t.string “reset_password_token”
t.datetime “reset_password_sent_at”
t.datetime “remember_created_at”
t.integer “sign_in_count”, :default => 0
t.datetime “current_sign_in_at”
t.datetime “last_sign_in_at”
t.string “current_sign_in_ip”
t.string “last_sign_in_ip”
t.datetime “created_at”, :null => false
t.datetime “updated_at”, :null => false
t.string “name”
t.string “street”
t.string “city”
t.string “zip”
t.string “nip”
end[/code]

No to

t = Thing.find(id)

pod t masz dane thinga

t.user

tu dane usera

Czasem chyba człowiek musi zadać głupie pytanie aby się odblokować :slight_smile: Dzięki wielkie! :-))

Jak masz walidację długości pola

validates ..., :length

to nie musisz już sprawdzać czy pole jest obecne, bo przytoczona walidacja brak wartości uzna za wartość o długości 0. Chyba że ta walidacja jest po to, żeby odpowiedni komunikat błędu wyświetlić.