質問編集履歴

3 説明補足

pecchan

pecchan score 397

2017/03/14 16:37  投稿

【Ruby on Rails】accepts_nested_attributes_forで親の任意のデータを子にセットしたい
社員の新規登録時に、同じ画面で  
資格も複数行登録したいです。  
 
親:社員  
子:資格  
 
 
色々と参考にしながら、accepts_nested_attributes_forを使い
親子関係のモデルを同時に登録するところまで出来ました。
子モデル側のフィールドに、親モデル名_idを持つことで
自動で親のキーをセットしてくれますが、
この他にも親のデータをセットしたい場合、どこに何を記述するのが定石でしょうか?
例えば、受注伝票なら
受注伝票キーは自動でセットされますが
受注伝票番号も同じタイミングでセットしたい場合です。
今回の場合ですと、  
viewで入力された社員名(emp_name)を  
子のemp_nameにもセットして登録したいです。  
宜しくお願い致します。
親:社員  
子:資格  
 
社員の新規登録時に、同じ画面で  
資格も複数行登録したいです。  
 
viewで入力された社員名(emp_name)を  
子のemp_nameにもセットして登録したいです。  
社員モデル
```ruby
class Employee < ApplicationRecord
   has_many :license, dependent: :delete_all
   accepts_nested_attributes_for :license, allow_destroy: true
   validates :emp_name, presence: true
end
```
社員コントローラ
```ruby
class EmployeesController < ApplicationController
 before_action :set_employee, only: [:show, :edit, :update, :destroy]
 # POST /employees
 # POST /employees.json
 def create
   @employee = Employee.new(employee_params)
   respond_to do |format|
     if @employee.save
       format.html { redirect_to @employee, notice: 'Employee was successfully created.' }
       format.json { render :show, status: :created, location: @employee }
     else
       format.html { render :new }
       format.json { render json: @employee.errors, status: :unprocessable_entity }
     end
   end
 end
 private
   # Use callbacks to share common setup or constraints between actions.
   def set_employee
     @employee = Employee.find(params[:id])
   end
   # Never trust parameters from the scary internet, only allow the white list through.
   def employee_params
       params.require(:employee).permit(
                   :emp_code,
                   :emp_name,
                   :retire_date,
                   lisence_attributes:[:id, :emp_code, :emp_name, :_destroy])
   end
end
```
  • Ruby on Rails

    18271 questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • Ruby on Rails 4

    2659 questions

    Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

2

pecchan

pecchan score 397

2017/03/14 16:34  投稿

【Ruby on Rails】accepts_nested_attributes_forで親の任意のデータを子にセットしたい
色々と参考にしながら、accepts_nested_attributes_forを使い
親子関係のモデルを同時に登録するところまで出来ました。
子モデル側のフィールドに、親モデル名_idを持つことで
自動で親のキーをセットしてくれますが、
この他にも親のデータをセットしたい場合、どこに何を記述するのが定石でしょうか?
例えば、受注伝票なら
受注伝票キーは自動でセットされますが
受注伝票番号も同じタイミングでセットしたい場合です。
宜しくお願い致します。
親:社員
子:資格
 
社員の新規登録時に、同じ画面で  
資格も複数行登録したいです。  
 
viewで入力された社員名(emp_name)を  
子のemp_nameにもセットして登録したいです。  
社員モデル
```ruby
class Employee < ApplicationRecord
   has_many :license, dependent: :delete_all
   accepts_nested_attributes_for :license, allow_destroy: true
   validates :emp_name, presence: true
end
```
社員コントローラ
```ruby
class EmployeesController < ApplicationController
 before_action :set_employee, only: [:show, :edit, :update, :destroy]
 # POST /employees
 # POST /employees.json
 def create
   @employee = Employee.new(employee_params)
   respond_to do |format|
     if @employee.save
       format.html { redirect_to @employee, notice: 'Employee was successfully created.' }
       format.json { render :show, status: :created, location: @employee }
     else
       format.html { render :new }
       format.json { render json: @employee.errors, status: :unprocessable_entity }
     end
   end
 end
 private
   # Use callbacks to share common setup or constraints between actions.
   def set_employee
     @employee = Employee.find(params[:id])
   end
   # Never trust parameters from the scary internet, only allow the white list through.
   def employee_params
       params.require(:employee).permit(
                   :emp_code,
                   :emp_name,
                   :retire_date,
                   lisence_attributes:[:id, :emp_code, :emp_name, :_destroy])
   end
end
```
  • Ruby on Rails

    18271 questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • Ruby on Rails 4

    2659 questions

    Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

1 ソース追加

pecchan

pecchan score 397

2017/03/14 16:32  投稿

【Ruby on Rails】accepts_nested_attributes_forで親の任意のデータを子にセットしたい
色々と参考にしながら、accepts_nested_attributes_forを使い
親子関係のモデルを同時に登録するところまで出来ました。
子モデル側のフィールドに、親モデル名_idを持つことで
自動で親のキーをセットしてくれますが、
この他にも親のデータをセットしたい場合、どこに何を記述するのが定石でしょうか?
例えば、受注伝票なら
受注伝票キーは自動でセットされますが
受注伝票番号も同じタイミングでセットしたい場合です。
宜しくお願い致します。
宜しくお願い致します。
親:社員
子:資格
社員モデル
```ruby
class Employee < ApplicationRecord
   has_many :license, dependent: :delete_all
   accepts_nested_attributes_for :license, allow_destroy: true
   validates :emp_name, presence: true
end
```
社員コントローラ
```ruby
class EmployeesController < ApplicationController
 before_action :set_employee, only: [:show, :edit, :update, :destroy]
 # POST /employees
 # POST /employees.json
 def create
   @employee = Employee.new(employee_params)
   respond_to do |format|
     if @employee.save
       format.html { redirect_to @employee, notice: 'Employee was successfully created.' }
       format.json { render :show, status: :created, location: @employee }
     else
       format.html { render :new }
       format.json { render json: @employee.errors, status: :unprocessable_entity }
     end
   end
 end
 private
   # Use callbacks to share common setup or constraints between actions.
   def set_employee
     @employee = Employee.find(params[:id])
   end
   # Never trust parameters from the scary internet, only allow the white list through.
   def employee_params
       params.require(:employee).permit(
                   :emp_code,
                   :emp_name,
                   :retire_date,
                   lisence_attributes:[:id, :emp_code, :emp_name, :_destroy])
   end
end
```
  • Ruby on Rails

    18271 questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • Ruby on Rails 4

    2659 questions

    Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る