以下のようなモデル間(主:TargetServer, 副:Disk)で
リレーションを貼ってひとつのフォームで複数のモデルをDBへ登録できるようにしようとしているのですが、TargetServerをAddしようとすると
undefined method `disk' for #Targetserver:0x00007f7c25709358
と出てしまいます。。
いろいろと調べたのですがうまく解決できなかったため
どなたか対応法をご教授いただければ幸いです。
よろしくお願いいたします。
- app/models/targetserver.rb
class Targetserver < ApplicationRecord has_many :disks accepts_nested_attributes_for :disks end
- app/models/disk.rb
class Disk < ApplicationRecord belongs_to :targetserver end
- app/controllers/targetservers_controller.rb
class TargetserversController < ApplicationController before_action :set_targetserver, only: [:show, :edit, :update, :destroy] # GET /targetservers # GET /targetservers.json def index @targetservers = Targetserver.all end # GET /targetservers/1 # GET /targetservers/1.json def show end # GET /targetservers/new def new @targetserver = Targetserver.new @targetserver.disks.build end # GET /targetservers/1/edit def edit end # POST /targetservers # POST /targetservers.json def create @targetserver = Targetserver.new(targetserver_params) respond_to do |format| if @targetserver.save format.html { redirect_to @targetserver, notice: 'Targetserver was successfully created.' } format.json { render :show, status: :created, location: @targetserver } else format.html { render :new } format.json { render json: @targetserver.errors, status: :unprocessable_entity } end end end # PATCH/PUT /targetservers/1 # PATCH/PUT /targetservers/1.json def update respond_to do |format| if @targetserver.update(targetserver_params) format.html { redirect_to @targetserver, notice: 'Targetserver was successfully updated.' } format.json { render :show, status: :ok, location: @targetserver } else format.html { render :edit } format.json { render json: @targetserver.errors, status: :unprocessable_entity } end end end # DELETE /targetservers/1 # DELETE /targetservers/1.json def destroy @targetserver.destroy respond_to do |format| format.html { redirect_to targetservers_url, notice: 'Targetserver was successfully destroyed.' } format.json { head :no_content } end end private # Use callbacks to share common setup or constraints between actions. def set_targetserver @targetserver = Targetserver.find(params[:id]) end # Never trust parameters from the scary internet, only allow the white list through. def targetserver_params params.require(:targetserver).permit(:hostname, :cpumemory, :os, disks_attributes: [:disk]) end end
(TargetServerをAddする際に呼び出す_form)
<%= form_with(model: targetserver, local: true) do |form| %> <% if targetserver.errors.any? %> <div id="error_explanation"> <h2><%= pluralize(targetserver.errors.count, "error") %> prohibited this targetserver from being saved:</h2> <ul> <% targetserver.errors.full_messages.each do |message| %> <li><%= message %></li> <% end %> </ul> </div> <% end %> <div class="field"> <%= form.label :hostname %> <%= form.text_field :hostname, id: :targetserver_hostname %> </div> <div class="field"> <%= form.label :cpumemory, "CPU & Memory" %> <%= form.text_field :cpumemory, id: :targetserver_cpumemory %> </div> <div class="field"> <%= form.label :os, "OS" %> <%= form.text_field :os, id: :targetserver_os %> </div> <%= @targetserver.disk.each do |disk| %> <%= hidden_field_tag :partitionname, id: :disk_partitionname, :value => "/" %> <%= disk.label :disk_size %> <%= disk.text_field :size, id: :disk_size %> <% end %> <div class="actions"> <%= form.submit %> </div> <% end %>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/07 16:19
2018/03/07 17:30 編集
2018/03/08 09:36