2015-04-20 4 views
-1

Привет им пытаются добавить некоторые записи в моей базе данных с этой модельюРельсы многие ко многим моделям, добавление записей

class Colleagueship < ActiveRecord::Base 
    belongs_to :employee 
    belongs_to :colleague, :class_name => 'Employee' 
end 

class Employee < ActiveRecord::Base  
    has_many :colleagueships 
    has_many :colleagues, :through => :colleagueships 
    # ... 
end 

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

def new 
    employee = ## gotta get the id here in the form 
    @colleagueship = employee.colleagueships.build(:colleague_id => params[:colleague_id]) 
    @colleagueship.save 

end 

Что вы думаете? как я могу достичь этого с помощью метода post http? мне нужно сохранить переменную employee с запросом и добавить там employee_id?

ответ

0

В контроллере

def new 
end 

def create 
    # inspect submitted params here 
    puts params 

    if colleagueship.save 
    # etc etc 
    else 
    # error 
    end 
end 

private 

def employee 
    @employee = Employee.find_by(params[:employee_id]) 
end 

def colleagueship 
    @colleagueship = employee.colleageships.build 
end 

helper_method :employee, :colleagueship 

Ваши маршруты должны быть вложенными, чтобы обеспечить ключ, который вы будете использовать, чтобы найти работника.

resources :employees do 
    # this will generate /employees/:employee_id/colleagues/:id 
    resources :colleagueships 
end 

На ваш взгляд, вы, вероятно, использовать помощника form_tag, так как это легче настроить формы с любыми полями, которые вы хотите, особенно если вы избегаете accepts_nested_attributes, которые вы должны. Вы также можете включить hidden_field_tag ​​с employee_id, если вы не вложены ваши маршруты.

= form_tag new_employee_colleague_path do 
    = text_field_tag 'colleageship[name]', placeholder: 'something...' 

Что-то в этом направлении должно работать. Обязательно проверьте хэш параметров, чтобы убедиться, что значения отформатированы правильно.

+0

Это потрясающе объяснено, спасибо большое – AbdulHamid

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