2016-04-03 7 views
0

это мои 3 моделей:Рубин на Rails has_many: через контроллер ассоциации

модели для пользователя:

class User < ActiveRecord::Base 
has_many :patients, through: :treatments 
has_many :treatments 
. 
. 
. 

модели для пациента:

class Patient < ActiveRecord::Base 
has_many :user, through: :treatments 
has_many :treatments, dependent: :destroy 
. 
. 
. 

модели для лечения:

class Treatment < ActiveRecord::Base 
belongs_to :patient 
belongs_to :user 
validates :patient_id, presence: true 
default_scope -> { order(created_at: :desc) } 
end 

И это мой Лечение стол:

class CreateTreatments < ActiveRecord::Migration 
    def change 
    create_table :treatments do |t| 
     t.date :teartment_date 
     t.text :remark 
     t.float :fee 
     t.references :patient, index: true, foreign_key: true 

     t.timestamps null: false 
    end 
    add_index :treatments, [:patient_id, :created_at] 
end 
end 

теперь я хочу, чтобы определить контроллер, чтобы создать новый метод лечения, который принадлежит к пациенту конкретного пользователя.

это мой контроллер:

def new 
    @treat = Treatment.new 
    end 

    def create  

    @userpatient = current_user.treatments.build(treat_params) 

    if @userpatient.save 
    flash[:success] = "new treatment added" 
    redirect_to root_url 
    else 
    render 'new' 
    end 
end 

, но это ошибка, которую я получаю, в то время как я хочу, чтобы создать новый метод лечения:

ActiveRecord::UnknownAttributeError in TreatmentsController#create 

unknown attribute 'user_id' for Treatment. 

и это current_user:

def current_user 
    if (user_id = session[:user_id]) 
    @current_user ||= User.find_by(id: user_id) 
    elsif (user_id = cookies.signed[:user_id]) 
    user = User.find_by(id: user_id) 
    if user && user.authenticated?(cookies[:remember_token]) 
    log_in user 
    @current_user = user 
    end 
    end 
    end 

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

Благодаря ответам, я уже пришел с этой проблемой, добавив ссылочный столбец. теперь я не получаю, но он не сохраняет никаких обработок. i означает часть:

if @treat.save 
    flash[:success] = "new treatment added" 
    redirect_to root_url 
else 
    render 'new' 
end 

не сохраняет и просто визуализирует «новое».

У меня есть 2 вопроса:

1-, как я могу создать код своего контроллера?

2 Как получить мою базу лечения на пациента. Какую переменную я должен определить в методе «показать» моим пациентом, чтобы получить лечение?

+1

В таблице 'treatment' должно быть' user_id'. – Pavan

+0

Как его добавить? – Shahryar

+1

Используйте переход, чтобы добавить user_id как @Pavan, написанный в комментарии раньше, вы можете использовать ссылку там, например 'add_reference: treatment,: user, index: true'. – unused

ответ

1

Когда вы говорите, что Userhas_many :treatments и Treatmentbelongs_to :user, обе ассоциации ожидают найти user_id колонки в вашей treatments таблицы. Вы можете захотеть изменить свою миграцию включать:

t.integer :user_id 

, а затем падение таблиц (если у них нет никаких данных пока!) И повторно миграций. В качестве альтернативы вы можете создать новую миграцию и просто запустить ее:

add_column :treatments, :user_id, :integer 
+0

Возможно, вы захотите добавить индекс, я также предложил бы использовать 'add_reference'. – unused

+0

Я думаю, что пользователь - пациент - возможно, has_many: patient, foreign_key: "user_id". – Ronna

+0

нет, пользователь не является пациентом – Shahryar

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