ruby-on-rails - 无法让 cocoon 在 Ruby on Rails 4 上工作

标签 ruby-on-rails cocoon-gem

在过去的几个小时里,我一直在努力让它工作,但由于某种原因我做不到。我几乎完全按照 github 存储库链接上的指示执行了这些步骤。

我使用以下所有步骤创建了一个新应用程序:

# rails new demo_app
# cd demo_app/
+++ added gem 'cocoon' to the Gemfile
+++ added //= require cocoon to the application.js file
# rails g scaffold Project name:string description:string
# rails g model Task description:string done:boolean project:belongs_to
+++ added has_many :tasks to the Project model
+++ added :_destroy to the permit in my projects_controller.rb file
# bundle install

这是我的 views/projects/_form.html.erb 文件:
<%= form_for(@project) do |f| %>
  <% if @project.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@project.errors.count, "error") %> prohibited this project from being saved:</h2>

      <ul>
      <% @project.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :name %><br>
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :description %><br>
    <%= f.text_field :description %>
  </div>
  <%= f.fields_for :tasks do |task| %>
    <%= render 'task_fields', :f => task %>
    <%= link_to_add_association 'Add task', f, :tasks, class: "links" %>
  <% end %>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

现在这是我的 views/projects/_task_fields.html.erb 文件:
 <div id="nested-fields">
  <div class="field">
      <%= f.label :description %><br>
      <%= f.text_field :description %>
  </div>

  <div class="field">
      <%= f.label :description %><br>
      <%= f.text_field :description %>
  </div>
  <%= link_to_remove_association 'remove task', f %>
 </div>                 

这不正是指南提到的吗?当我去创建一个新项目时,它只显示默认的名称标签、名称文本框、描述标签、描述文本框和“创建项目链接”。这是新项目表单的 HTML 输出:
<!DOCTYPE html>
<html>
<head>
  <title>DemoApp</title>
  <link data-turbolinks-track="true" href="/assets/projects.css?body=1" media="all" rel="stylesheet" />
<link data-turbolinks-track="true" href="/assets/scaffolds.css?body=1" media="all" rel="stylesheet" />
<link data-turbolinks-track="true" href="/assets/application.css?body=1" media="all" rel="stylesheet" />
  <script data-turbolinks-track="true" src="/assets/jquery.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery_ujs.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/turbolinks.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/projects.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/cocoon.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/application.js?body=1"></script>
  <meta content="authenticity_token" name="csrf-param" />
<meta content="uIpLnix47UNaBONCR+0SV/uz1uiulU6BHqKe5qENzHQ=" name="csrf-token" />
</head>
<body>

<h1>New project</h1>

<form accept-charset="UTF-8" action="/projects" class="new_project" id="new_project" method="post"><div style="display:none"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="uIpLnix47UNaBONCR+0SV/uz1uiulU6BHqKe5qENzHQ=" /></div>

  <div class="field">
    <label for="project_name">Name</label><br>
    <input id="project_name" name="project[name]" type="text" />
  </div>
  <div class="field">
    <label for="project_description">Description</label><br>
    <input id="project_description" name="project[description]" type="text" />
  </div>
    <div class="actions">
    <input name="commit" type="submit" value="Create Project" />
  </div>
</form>

<a href="/projects">Back</a>


</body>
</html>

有人可以帮助我吗?看起来我正在做指南中提到的所有事情,但我没有从中得到任何好处。

最佳答案

link_to_add_association应该位于fields_for之外标签,它里面的任何东西都会为添加的每个任务复制,你通常只希望在最后添加一个链接,也没有显示,因为没有任务被实例化,为了实例化一个你或者点击 link_to_add_association或在项目表单创建时实例化它们,这可以在项目 Controller new 中完成。行动

#projects_controller.rb
def new
    @project = Project.new 
    @projet.tasks.build
end

您还可以在此处通过执行一些循环来实例化表单创建中的多个任务
3.times do
  @project.tasks.build
end

关于ruby-on-rails - 无法让 cocoon 在 Ruby on Rails 4 上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26346850/

相关文章:

jquery - 茧/jQuery : append items to relevant table

ruby-on-rails - 尝试在 Rails 中设置 rspec 测试时获取未初始化的常量 Faker::String

mysql - Sierra/El Capitan Mac 上的 Ruby on Rails MySQL 问题

ruby-on-rails - 多事件机器导致一个报告未定义的方法 `stop' 为 nil :NilClass

ruby-on-rails - 将 draper gem 与设计注册 Controller 一起使用

ruby-on-rails - 嵌套形式/茧 : children not saving

javascript - 为什么我的代码中的 cocoon 不捕获回调?

ruby-on-rails - ruby / ruby -2.0.0-p0/lib/ruby/2.0.0/psych.rb :205:in `parse' : (<unknown>): could not find expected ':' while scanning a simple key at line 18 column 3

javascript - 嵌套表单 rails 中的动态选择

ruby-on-rails - Rails cocoon 嵌套形式仅接收一个第一个嵌套属性