2016-04-03 3 views
0

Я пытаюсь использовать значение атрибута в модели, но ее не работает .. У меня есть три модели:Я хочу использовать атрибут модели в Rails зрения

модели/resident.rb

class Resident < ActiveRecord::Base 
    belongs_to :hostel 
    has_one :user,dependent: :delete 
end 

модели/user.rb

class User < ActiveRecord::Base 
belongs_to:resident 
end 

модели/hostel.rb

class Hostel < ActiveRecord::Base 
    has_many :residents 
    has_one :rate_card,dependent: :delete 
end 

Схема

Resident

create_table "residents", force: :cascade do |t| 
    t.string "room_number" 
    t.string "roll_number" 
    t.string "name" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.integer "hostel_id" 
    end 

Пользователь

create_table "users", force: :cascade do |t| 
    t.string "roll_number" 
    t.string "email" 
    t.datetime "created_at",      null: false 
    t.datetime "updated_at",      null: false 
    t.integer "resident_id" 
    end 

Hostel

create_table "hostels", force: :cascade do |t| 
    t.string "hostel" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

Теперь я хочу использовать общежитие значение атрибута в пользователей/show.html.erb Я могу это сделать:

<%if @user.resident.roll_number=="101303110"%> 

если номер рулона присутствует, а затем возвращается true .. но если это использование:

<%if @user.resident.hostel=="J"%> 

и если J общежитие присутствует в Hostel модели, то она возвращается ложное.

Но когда мы помещаем <%@user.resident.hostel%> в show.html.erb, тогда он показывает значение J. Как использовать атрибуты связанных моделей в каждом другом представлении?

+0

"хотите"? "я"? Если вы посмотрите на другие вопросы и ответы, вы найдете относительно немного примеров умышленно неправильной орфографии и грамматики. Сохраните это для текстовых сообщений. –

+0

-_- Я здесь для кодирования, а не для изучения английского! –

ответ

1

Учитывая ваши ассоциации, @user.resident.hostel загрузит общежитие. Но вы хотите сравнить строку hostel на hostel. Поэтому ваше сравнение должно быть:

<% if @user.resident.hostel.hostel == 'J' %> 

Объяснение:

@user       # returns your a user 

@user.resident    # follows `belongs_to :resident` and 
           # returns a resident 

@user.resident.hostel   # follows `belongs_to :hostel` on the resident and 
           # returns a hostel 

@user.resident.hostel.hostel # returns the value store in the `hostel` 
           # column of that `hostel` 

Btw. Я бы сказал, что так называемые цепные звонки нарушают Law of Demeter. Но трудно предложить какую-либо альтернативу, не имея дополнительной информации о вашем приложении.

+0

Можете ли вы объяснить, как это работает? И да, он работает: D –

+0

сделано! и спасибо за объяснение ... –

 Смежные вопросы

  • Нет связанных вопросов^_^