2015-05-06 3 views
0

Я пытаюсь установить значение inputter_id автоматически в id для для inputter_type соответствующего «Медицинской команду» в форме, если пользователь является current_clinician:значения Нажмите для моделирования при создании - Rails

def create 
    esas_assessment_params = params.require(:esas_assessment).permit(:patient_id, :clinician_id, :time, :year, :month, :day, :inputter_name, :inputter_id, :pain, :pain_comment, :tiredness, :tiredness_comment, :drowsiness, :drowsiness_comment, :nausea, :nausea_comment, :lack_of_appetite, :lack_of_appetite_comment, :shortness_of_breath, :shortness_of_breath_comment, :depression, :depression_comment, :wellbeing, :wellbeing_comment, :other_symptom_id, :other_symptom_score, :other_symptom_comment, :esas_comment) 
    @esas_assessment = EsasAssessment.new(esas_assessment_params) 
    if current_clinician 
     @esas_assessment.clinician = current_user.clinician 
     @esas_assessment.inputter_name = current_user.clinician.full_name 
     @esas_assessment.inputter_id = Inputter.find_by(inputter_type: 'Medical team') 
    else 
     @esas_assessment.patient = current_user.patient 
     @esas_assessment.clinician = current_user.patient.clinician 
    end 
    if @esas_assessment.save 
     redirect_to esas_assessments_path, notice: "ESAS assessment submitted!" 
    else 
     render "new", alert: "ESAS assessment not submitted!" 
    end 
    end 

или более просто:

def create 
    esas_assessment_params = params.require(:esas_assessment).permit! 
    @esas_assessment = EsasAssessment.new(esas_assessment_params) 
 @esas_assessment.inputter_id = Inputter.find_by(inputter_type: 'Medical team') 
if @esas_assessment.save 
     redirect_to esas_assessments_path, notice: "ESAS assessment submitted!" 
    else 
     render "new", alert: "ESAS assessment not submitted!" 
    end 
    end 

в первом примере линия, чтобы установить значение @esas_assessment.clinician автоматически в current_user.clinician и установке inputter_name и работы, но inputter_id не делает.

Моя модель EsasAssessment является:

EsasAssessment: 
    patient_id: integer 
    clinician_id: integer 
    created_at: datetime 
    updated_at: datetime 
    inputter_name: string 
    inputter_id: integer 

class EsasAssessment < ActiveRecord::Base 
    belongs_to :other_symptom 
    belongs_to :clinician 
    belongs_to :patient 
    belongs_to :inputter 
end 

Inputter является:

Inputter: 
    inputter_type: string 

class Inputter < ActiveRecord::Base 
    has_many :esas_assessments 
end 

Когда я представить мою форму я не получаю никаких ошибок или предупреждение, inputter_id просто nil

если I введите

Inputter.find_by (inputter_type: 'Медицинская команда')

в консоли возвращает

#<Inputter {"id"=>309, "inputter_type"=>"Medical team"}>

Любые советы о том, как получить значение придерживаться новой EsasAssessment бы be great

+0

Не совсем по теме, но с вашей 'esas_assessment_params = params.require (: esas_assessment) .permit (: patient_id, ... 'в действии создания кажется странным и, возможно, небезопасным. Обычно это частный метод. – Beartech

+0

Кроме того, вы можете воссоздать это в консоли рельсов? – Beartech

+0

Я просто переместил его из частного, чтобы упростить. Посмотрите на нижнюю часть вопроса о попытке его на консоли – Skiapex

ответ

1

Угадайте, что вы должны назначить id найденного входа, а не самого объекта в этой строке

@esas_assessment.inputter_id = Inputter.find_by(inputter_type: 'Medical team') 

Что-то вроде

@esas_assessment.inputter_id = Inputter.find_by(inputter_type: 'Medical team').try(:id) 

Или

@esas_assessment.inputter = Inputter.find_by(inputter_type: 'Medical team') 
+0

попробовал второй вариант, и это сработало - спасибо! – Skiapex

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