Rails копирует идентификатор из одной модели в другую

У меня есть модель сотрудника:

class Employee < ActiveRecord::Base
  attr_accessible :blood_group_id, :caste_id, :category_id, :emp_dob, :emp_email,     :emp_fathername, :emp_fname, :emp_full_name, :gender_id, :emp_id, :emp_lname, :emp_loc_master_id, :emp_mname, :emp_mobile_no, :emp_permanent_address, :emp_phone_no, :religion_id

  has_many:postings
  has_many:dependents
  has_many:qualifications

  belongs_to:gender
  belongs_to:category
  belongs_to:religion
  belongs_to:caste
  belongs_to:blood_group
end

И модель квалификации:

class Qualification < ActiveRecord::Base
              attr_accessible :Remarks, :employee_id, :qualification_name_id, :qualification_type_id, :specialisation_id, :university_id, :year

              belongs_to:employee
              belongs_to:qualification_type
              belongs_to:qualification_name
              belongs_to:specialisation
              belongs_to:university
            end

Все ассоциации сделаны правильно. Теперь я могу создать нового сотрудника с помощью формы сотрудника, а также я могу дать ему квалификацию, перейдя в форму квалификации (ЯВНО) и выбрав сотрудника из раскрывающегося списка и дав ему квалификацию.

Но я хочу сделать следующее: создать кнопку «Добавить квалификацию», которая позволит мне добавить квалификацию для наблюдаемого сотрудника и неявно берет идентификатор сотрудника, и мне просто нужно добавить квалификацию и нажать «Создать».


person SkyKOG    schedule 04.02.2013    source источник
comment
тогда в чем дело. Добавьте кнопку квалификации и нажмите, чтобы показать квалификации для добавления. Это должно содержаться в форме, так как ее необходимо отправить. Более лучший подход - используйте ajax для отправки. Это также не потребует формы.   -  person My God    schedule 04.02.2013
comment
Спасибо за ответ, Саураб ... Я не понимаю, что писать в кнопке ссылки на квалификацию ... я могу перенаправить на страницу квалификации со страницы моего сотрудника ... но там мне нужно снова выбрать сотрудника ... , что портит цель ... Ему нужно автоматически получить идентификатор сотрудника от сотрудника, откуда я был перенаправлен ...   -  person SkyKOG    schedule 04.02.2013
comment
Создайте страницу «Редактировать пользователя» и добавьте раскрывающийся список квалификации или флажки, если пользователь может выбрать несколько. Затем нажмите кнопку «Обновить», чтобы обновить то, что пользователь выбрал или изменил.   -  person My God    schedule 04.02.2013
comment
Нет, нет, это можно было сделать :) ... я знаю это ... дело в том ... мне нужно вести еще одну таблицу для квалификаций, как вы можете видеть из моей модели ... я хочу иметь возможность добавить квалификацию в a после перенаправления из таблицы сотрудников ... Идентификатор сотрудника должен быть в таблице квалификаций автоматически ....   -  person SkyKOG    schedule 04.02.2013
comment
Предложение не по теме: у вас есть сценарий, в котором у сотрудника много квалификаций, и в то же время квалификация связана со многими сотрудниками. Если это так, то вам следует изменить структуру модели.   -  person Manoj Monga    schedule 04.02.2013
comment
Если указанная структура верна, то хотите ли вы просто передать соответствующий идентификатор сотрудника в квалификационную форму? Или Вы просто хотите обновить/создать квалификации для сотрудника на странице редактирования сотрудника? В последнем случае таблица квалификаций также будет обновлена, поскольку вы выразили обеспокоенность по этому поводу в своем последнем комментарии.   -  person Manoj Monga    schedule 04.02.2013
comment
Эй, чел ... c в соответствии с моей текущей настройкой ... это единственный способ, которым я могу добавить квалификацию сотруднику ... то есть, перейдя к моему мастеру квалификаций -> выбрав из сотрудников -> и затем добавив его квалификацию как таковую : i.imgur.com/wyFSNGB.png Это отражено на странице сотрудников следующим образом: i.imgur.com/D4wd6yq.png я хочу нажать на новую кнопку (в настоящее время фиктивный), чтобы он автоматически перенаправлял на страницу квалификации, выбирая Акаши (поскольку я нажал «Новый» при просмотре сведений об Акаше), и просто добавлял квалификации :) ./...   -  person SkyKOG    schedule 04.02.2013
comment
Это в конечном итоге позволило бы мне... добавить обучение, иждивенцев, листья и т.д. и т.д.... с аналогичной логикой... База данных ВЫСОКО нормализована... только с первичными ключами, связывающими вещи... я не хочу задушить своего сотрудника таблица со слишком большим количеством столбцов...   -  person SkyKOG    schedule 04.02.2013


Ответы (2)


Используйте динамическую форму, отправляйте данные на контроллер, анализируйте данные на стороне сервера. Я предлагаю использовать для этого KnockoutJS, вот аналогичный пример:

http://knockoutjs.com/examples/contactsEditor.html

person Marcin Adamczyk    schedule 04.02.2013
comment
Спасибо, сэр, за ответ ... Но не должно быть простого способа ... Я действительно новичок в рельсах ... концептуально я не могу просто получить идентификатор сотрудника, используя некоторый SQL на контроллере, когда я нажимаю кнопку добавления квалификации ... ... так что идентификатор сотрудника предварительно выбран, и мне просто нужно добавить квалификацию ... Большое спасибо ... Мне действительно трудно найти синтаксис ... - person SkyKOG; 04.02.2013
comment
если вы хотите упростить задачу, сделайте статическое количество квалификаций (например, 3) и просто используйте стандартную форму. - person Marcin Adamczyk; 04.02.2013
comment
Большое спасибо за помощь, сэр :) ... Я изучу и узнаю больше ... так как мне нужно правильно выполнить это конкретное требование ... С уважением - Sky - person SkyKOG; 04.02.2013

Спасибо всем за помощь...

вот что наконец сработало:

Я добавил это в свой контроллер квалификации ...

class QualificationsController < InheritedResources::Base
def new
    @qualification = Qualification.new(:employee_id => params[:id])
end

def create
    @qualification = Qualification.new(params[:qualification])
        respond_to do |format|
          if @qualification.save
            format.html { redirect_to @qualification, notice: 'Qualification was successfully created.' }
            format.json { render json: @qualification, status: :created, location: @qualification }
          else
            format.html { render action: "new" }
            format.json { render json: @qualification.errors, status: :unprocessable_entity }
          end
        end
end
end

затем я добавил это на свою страницу просмотра employee_show...

<%= link_to "Add A New Qualification for this Employee", new_qualification_url(:id => @employee.id) %>

И я добавил это в свою квалификационную форму:

 <%= simple_form_for @qualification, :html => { :class => 'form-horizontal' } do |f| %>

  <%= f.association :employee,label_method: :emp_full_name, value_method: :id, include_blank: false, :as => :hidden%>
<%= f.association :employee,label_method: :emp_full_name, value_method: :id, include_blank: false, disabled: true%>

И после добавления сотрудника это помогло мне вернуться к сотруднику, откуда я пришел:

<%= link_to t('.back', :default => t("helpers.links.back")),
          employee_path(@qualification.employee_id), :class => 'btn'  %>

Я использую simple_form, который является потрясающим DSL FTW: D: D: D .....

И все в порядке, как и хотел :) ... Спасибо всем за помощь ... Я разместил здесь, чтобы кто-то, как моя проблема, мог разобраться в будущем: D ...

С Уважением

person SkyKOG    schedule 05.02.2013
comment
Это сообщение помогло мне понять концепции :) ... stackoverflow.com/a/5721624/1549731 - person SkyKOG; 05.02.2013