중간 연상 의 불량 행위

4972 단어 nested_form

묘사

나는 깊이 끼워 넣는 형식의 오류를 만났다.
간단히 말해 중간 연결(book in library -->book-->story)이 양식에 중첩된 속성 이외에 아무런 속성이 없을 때 중첩된 양식은 잘못된 ID(모든 것이 동일)를 생성하여params hash에서 컨트롤러에서 유일한 이야기를 얻을 수 있다.
나는 세 가지 모델이 있다.
class Library < ActiveRecord::Base
  has_many :books
  accepts_nested_attributes_for :books
end
class Book < ActiveRecord::Base
  belongs_to :library
  has_many :stories
  accepts_nested_attributes_for :stories
end
class Story < ActiveRecord::Base
  belongs_to :book
end
도서관 관리자:
class LibrariesController < ApplicationController
  def new
    @library = Library.new
    @library.books.build
  end

  def create
    render text: params.inspect
  end
end
내 도서관 표는 다음과 같다.
<%= nested_form_for(@library) do |f| %>
  <div class="field">
    <%= f.label :name_of_library %><br>
    <%= f.text_field :name_of_library %>

    <%= f.fields_for :books  do |book_f| %>
      <%= book_f.label :title %>
      <%= book_f.text_field :title %>

      <%= book_f.fields_for :stories do |story_f| %>
        <%= story_f.label :subtitle %>
        <%= story_f.text_field :subtitle %>

        <%= story_f.link_to_remove 'Remove story' %>
      <% end %>

      <%= book_f.link_to_add 'Add story', :stories %>
    <% end %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %> 
라이브러리를 만들 때, 나는 자동으로 여러 개의 이야기가 담긴 책으로 그것을 채운다. (이상하게 보이지만, 최초의 작업에는 폴더와 사진집이 있고, 그 안에 이와 관련된 사진이 포함되어 있어 더욱 의미가 있다.)
나는 책 한 권에 두 개의 이야기를 첨가했다.모든 것이 정상입니다. 요청을 보낸 후 매개 변수가 산열됩니다. (여기에서 불필요한 필드를 삭제했습니다.)
{"library"=>{"name_of_library"=>"Babylon library", "books_attributes"=>{"0"=>{"title"=>"Book of books", "stories_attributes"=>{"1368882624930"=>{"subtitle"=>"True story", "_destroy"=>"false"}, "1368882631410"=>{"subtitle"=>"False story", "_destroy"=>"false"}}}}}}
그리고 나는 표에서 도서 이름의 입력(portfolio의 사진 소장품은 이름이 없을 수 있음)을 삭제하고 다른 필드를 똑같은 방식으로 채우고 유일한 이야기를 얻었다. 왜냐하면 현재 표에 있는 모든 입력은 같은 id를 가지고 있기 때문이다. 뒤에 있는 이야기는 옛일을 다시 쓰기 때문이다.매개변수 해시는 다음과 같습니다.
{"library"=>{"name_of_library"=>"Babylon library", "books_attributes"=>{"0"=>{"stories_attributes"=>{"1368882731158"=>{"subtitle"=>"False story", "_destroy"=>"false"}}}}}}
너는https://github.com/prijutme4ty/nested_form_deep_association_bug그리고 실행/libraries/new(이 프로그램은 rails 4.0.rc1이지만 rails 3의 플러그인 폼이 완전히 같은 문제에 부딪혔음)을 시도하고 책 제목이form이나Not인 상황에서 시도한다.기호=를 삭제하면 필드가 렌더링되지 않습니다.
<%= book_f.label :title %>
<%= book_f.text_field :title %>
나는 표의 입력에 도대체 무슨 문제가 생겼는지 모르겠지만, 그것들은 분명히 뜻밖이다.
또한 만약에 내가 표를 보여주기 전에 중간 서적 관련을 저장한다면 이 오류는 저장되지 않은 관련에만 존재한다. 모든 작품 #new 작업에서 대상을 만드는 것은 매우 잘못된 방식이다.

토론 #1

보아하니 이것은 closestChildjavascript 코드의 문제인 것 같다.내가 사용하는 임시 해결 방안은 숨겨진 keep 입력 필드 (.gitcept 파일과 유사) 를 폼에 추가하는 것입니다.중간 블록에 주어진 입력 필드가 없을 때 closestChild 중간 블록의 상하문은 입력한 name 속성을 사용하기 때문에 파생할 수 없습니다.그래서 closestChild 내부 관련 입력을 눌렀다.

토론 #2

도 같은 문제가 있다.#266

토론 #셋

@kirel 네, 절대 똑같아요!당신의 해결 방안이 합병되기를 바랍니다.수동으로 테스트해 봤어요?네, 우리는 이미 생산하고 있습니다.우리 프로그램에 정상적으로 작동할 수 있도록 요청 규범을 추가했습니다.gem에 있는 기존 테스트의 문제는 정규 표현식이 정확한 구조만 테스트하고 잘못된 ID를 무시했기 때문이다. (모든 ID와 같다.)그러나 타임 스탬프이기 때문에 정확한 ID를 얻을 수 없습니다.우리의 규범에서 내가 해야 할 일은 정확한 폼 필드(capybara webkit 사용)를 작성하는 것이다.
page.execute_script <<-JAVASCRIPT # make sure simple IDs are generated for new form fields
  var i = 0; NestedFormEvents.prototype.newId = function () { return ++i; };
JAVASCRIPT

토론 #4

266호는 지금 본점에 있습니다.감사합니다!

토론 #5

저는 끼워넣기 형식(0.3.2)과 단순 형식(2.1.0)에 같은 문제가 있습니다.
코드 예:
=simple_nested_form_for[:user,@shop],url:“/user/update_shop_front_end”,id:@shop.id, 방법: "post",:html=>{:class=>'user info form horizontal'}do | f|
=f. 입력:이름
=f. 입력:logo
= 이미지 태그 f. 객체표지사이트 주소
.clearfix
% 인적 자원
%br
.title="배너 관리"
%br

상점 배너


=f. 필드 | 예: 스토어 | 배너 | b|
=b. 입력:이미지
=b. 링크 제거 "이 배너 제거"
%br
= f.link to add "add a banner": shop banner, 데이터: {target:#shop banner"}

토론 #6

gem에서 이 리콜 업데이트를 사용하지 않았습니다.gem 및 github 소스 코드를 추가하여 동일한 문제를 해결했습니다.
gem 'nested_form', github: 'ryanb/nested_form'

좋은 웹페이지 즐겨찾기