ruby on rails - संघों और नेस्टेड गुणों के माध्यम से Has_Many



ruby-on-rails ruby-on-rails-4 (1)

मैं एक दृश्य बनाने का प्रयास कर रहा हूं जिससे कि मुझे मेरी शामिल होने वाली टेबल के मूल्यों को सीधे बनाने और संपादित करने की अनुमति मिलती है इस मॉडल को 'नौकरी' कहा जाता है जब तक कोई बच्चा 2 पुस्तकों को काम पर रखता है, तब तक मेरी शामिल होने वाली तालिका में कई पंक्तियां बनाने में सक्षम होने की आवश्यकता है I मुझे कुछ परेशानी हो रही है और मुझे संदेह है कि यह मेरी संस्थाओं से नीचे है ...

मेरे पास 3 मॉडल हैं प्रत्येक बच्चे में 2 पुस्तकें हो सकती हैं:

class Child < ActiveRecord::Base
 has_many :hires
 has_many :books, through: :hires
end

class Hire < ActiveRecord::Base
 belongs_to :book
 belongs_to :child
 accepts_nested_attributes_for :book
 accepts_nested_attributes_for :child
end

class Book < ActiveRecord::Base
  has_many :hires
  has_many :children, through: :hires
  belongs_to :genres
end

नियंत्रक इस तरह दिखता है:

class HiresController < ApplicationController

...    

def new
    @hire = Hire.new
    2.times do
      @hire.build_book
    end
  end

 def create
    @hire = Hire.new(hire_params)

    respond_to do |format|
      if @hire.save
        format.html { redirect_to @hire, notice: 'Hire was successfully created.' }
        format.json { render :show, status: :created, location: @hire }
      else
        format.html { render :new }
        format.json { render json: @hire.errors, status: :unprocessable_entity }
      end
    end
  end

 ...    

private
    # Use callbacks to share common setup or constraints between actions.
    def set_hire
      @hire = Hire.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
        def hire_params
  params.require(:hire).permit(:child_id, book_attributes: [ :id, :book_id, :_destroy])
end
end

इस दृश्य को यह पसंद है:

<%= form_for(@hire) do |f| %>

    <%= f.label :child_id %><br>
    <%= f.select(:child_id, Child.all.collect {|a| [a.nickname, a.id]}) -%>

    <%= f.fields_for :books do |books_form| %>


    <%= books_form.label :book_id %><br>
    <%= books_form.select(:book_id, Book.all.collect {|a| [a.Title, a.id]}) %>
        <%# books_form.text_field :book_id #%>
    <% end %>


  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

समस्या यह है कि हैश आपके द्वारा अपेक्षा की गई किताबों के दायित्वों को नहीं जमा कर रहा है, यह सिर्फ 'किताबों' को जमा कर रहा है:

Processing by HiresController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"xx", "hire"=>{"child_id"=>"1", "books"=>{"book_id"=>"1"}}, "commit"=>"Create Hire"}
Unpermitted parameter: books

मुझे संदेह है क्योंकि किराया मॉडल के लिए मेरी संस्थाएं हैं:

belongs_to :book
accepts_nested_attributes_for :book

जिसका अर्थ है कि मैं गुणों को सही ढंग से नहीं बना सकता, लेकिन मुझे यकीन नहीं है कि यह कैसे हल करे। कोई मदद महान होगी, क्या मैं इस समस्या को बुरी तरह से हल कर रहा हूँ?

https://code.i-harness.com


Hire_param के लिए मजबूत पैरामीटर में book_attributes के लिए books_attributes को बदलने का प्रयास करें

    def hire_params
  params.require(:hire).permit(:child_id, book_attributes: [ :id, :book_id, :_destroy])
end