Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 将另一条记录保存到另一个表Rails中后,自动在表中创建记录4_Ruby On Rails 4_Has Many_Belongs To - Fatal编程技术网

Ruby on rails 4 将另一条记录保存到另一个表Rails中后,自动在表中创建记录4

Ruby on rails 4 将另一条记录保存到另一个表Rails中后,自动在表中创建记录4,ruby-on-rails-4,has-many,belongs-to,Ruby On Rails 4,Has Many,Belongs To,我仍然是RoR的新手。我的任务是根据书中插入的示例的数量添加示例,知道我有一个书表和一个示例表,两者之间的关系是一本书有许多示例,一个示例属于一本书。 这是我的尝试: 在books_controller.rb中 方法创建: def create @book= Book.new(book_params) if @book.save @book.nbr_exemplaires.times do |i| @exemplaire= Exemplaire.

我仍然是RoR的新手。我的任务是根据书中插入的示例的数量添加示例,知道我有一个书表和一个示例表,两者之间的关系是一本书有许多示例,一个示例属于一本书。 这是我的尝试:

在books_controller.rb中 方法创建:

 def create
    @book= Book.new(book_params)

     if @book.save
      @book.nbr_exemplaires.times do |i|
        @exemplaire= Exemplaire.create(book_id:  @book.id, state: 0 )
      end

      flash[:notice]='goood'
      redirect_to admin_manage_path
     else
       flash[:alert]='ouups'
       redirect_to root_url
     end
  end



  private

   def book_params
     params.require(:book).permit(:title, :pages, :resume,:nbr_exemplaires, :has_exemplaires,       :author_ids =>[], :subject_ids =>[])
    end
book/new.html.erb:

<h1>Add new book</h1>
          <%= form_for(@book) do |form| %>
          <div> <%= form.label :title %><br>
            <%= form.text_field :title %>
     </div>
     <div>
       <%= form.label :pages %><br>
       <%= form.number_field :pages %>
      </div>
      <div>
         <%= form.label :resume %><br>
         <%= form.text_area :resume %>
      </div>
      <div>
       <p>select author from existing list</p><br>
         <%= form.collection_select :author_ids, @authors, :id, :l_name, {:selected => 1}, {:name => 'book[author_ids][]'} %>

     </div>
      <div>
         <p> Select subject from existing list</p><br>
           <%= form.collection_select :subject_ids, @subjects, :id, :name, {:selected =>1}, {:name => 'book[subject_ids][]'} %>
      </div>
      <div>
        <%= form.label :has_exemplaires? %>
         <%= form.check_box :has_exemplaires,{}, 'Yes', 'No'%>
           <div id="expl_details" style="display:none;">
            <%= form.label :nbr_exemplaires %> <%= form.number_field :nbr_exemplaires %>

          </div>
         </div>
         <%= form.submit "Submit" %>
       <% end %>
       <script type="text/javascript">
         var checkbox = document.getElementById('book_has_exemplaires');
         var details_div = document.getElementById('expl_details');
         checkbox.onchange = function() {
           if(this.checked) {
              details_div.style['display'] = 'block';
           } else {
             details_div.style['display'] = 'none';
           }
          };
         </script>
添加新书



从现有列表中选择作者


1} ,{:name=>'book[author_id][]}%> 从现有列表中选择主题


1} ,{:name=>'book[subject_id][]}%> var checkbox=document.getElementById('book_has_examplalies'); var details_div=document.getElementById('expl_details'); checkbox.onchange=函数(){ 如果(选中此项){ 细节部分样式['display']='block'; }否则{ 细节部分样式['display']='none'; } };
我将使用嵌套属性,这样rails将通过相同的表单自动为您创建它们:

class Book < ActiveRecord::Base
  has_many :exemplaires
  accepts_nested_attributes_for :exemplaires, allow_destroy: true
classbook
这将允许在视图中使用嵌套的表单生成器:

<%= form_for(@book) do |form| %>

  <div><%= form.label :title %><br>
       <%= form.text_field :title %>
  </div>

  <%= form.fields_for :exemplaires do |f| %>
     <%= f.text_field :name %>
     ... more fields
  <% end %>


... 更多领域
然后可以添加一些javascript来创建多个嵌套表单:

<%= link_to_add_fields "Add Exemplarie", f, :answers %>

通过这种设置,rails将在同一个操作中自动创建所有关联对象,而无需在控制器/模型端编写额外代码。下面是一个关于它的好例子:


如果你还没有订阅,我建议你订阅。这是我开始使用rails时使用过的最有用的资源,每月只需几美元。祝你好运

那么我建议如下:

class Book < ActiveRecord::Base
  has_many :exemplaires

  attr_accessor :nbr_exemplaires
  after_save :create_exemplaires

  private 

  def create_exemplaires
    nbr_exemplaires.times do
        self.exemplaires.create()
    end
  end
classbook

如果您的表中实际有一个列名“nbr\u exemplaries”,则不需要attr\u访问器行。只有当您不将其作为单独的值保存在DB中时,才可以这样做

感谢您的回复,但我真正想做的是,用户输入书籍的数量,此时会根据用户输入的数字自动将一些记录添加到示例表中