ruby-on-rails - 使用 mongodb 嵌套字段

标签 ruby-on-rails ruby mongodb nested-forms nested-form-for

我正在尝试使用 mongodb 创建嵌套字段。为此,我正在使用 gem mongomodel允许使用 ruby​​ 和 mongodb,我正在使用 gem nested_form , 创建动态嵌套字段。我遇到了以下问题:

未定义的方法reflect_on_association' 用于#`

我在互联网上发现的其他类似错误与我想在此处使用 mongodb 执行的操作并不匹配。我是 RoR 的新手,我不知道如何解决这个问题。谁能帮帮我?

这是我的模型:

调查.rb

class Survey < MongoModel::Document
  property :name, String
  property :questions, Collection[Question]
  timestamps!

  accepts_nested_attributes_for :questions, :reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true
end

问题.rb

class Question < MongoModel::Document
  property :content, String
  timestamps!
end

我的 Controller :

surveys_controller.rb
class SurveysController < ApplicationController
  # GET /surveys
  # GET /surveys.json
  def index
    @surveys = Survey.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @surveys }
    end
  end

  # GET /surveys/1
  # GET /surveys/1.json
  def show
    @survey = Survey.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @survey }
    end
  end

  # GET /surveys/new
  # GET /surveys/new.json
  def new
    @survey = Survey.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @survey }
    end
  end

  # GET /surveys/1/edit
  def edit
    @survey = Survey.find(params[:id])
  end

  # POST /surveys
  # POST /surveys.json
  def create
    @survey = Survey.new(params[:survey])

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

  # PUT /surveys/1
  # PUT /surveys/1.json
  def update
    @survey = Survey.find(params[:id])

    respond_to do |format|
      if @survey.update_attributes(params[:survey])
        format.html { redirect_to @survey, notice: 'Survey was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @survey.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /surveys/1
  # DELETE /surveys/1.json
  def destroy
    @survey = Survey.find(params[:id])
    @survey.destroy

    respond_to do |format|
      format.html { redirect_to surveys_url }
      format.json { head :no_content }
    end
  end
end

我的 gem 文件:

source 'https://rubygems.org'

gem 'rails', '3.2.8'

# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'

gem "mongomodel"
gem "bson_ext"
gem "nested_form"

# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'

  # See https://github.com/sstephenson/execjs#readme for more supported runtimes
  # gem 'therubyracer', :platforms => :ruby

  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'

# To use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.0.0'

# To use Jbuilder templates for JSON
# gem 'jbuilder'

# Use unicorn as the app server
# gem 'unicorn'

# Deploy with Capistrano
# gem 'capistrano'

# To use debugger
# gem 'debugger'

我对调查的看法:

_form.html.erb
<%= nested_form_for(@survey) do |f| %>
  <% if @survey.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@survey.errors.count, "error") %> prohibited this survey from being saved:</h2>

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

  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <p>
    <%= f.fields_for :questions do |builder| %>
    <p>
        <%= builder.label :content, "Question" %>
    <%= builder.text_area :content, :rows => 3 %>
    </p>    
    <% end %>
    <p><%= f.link_to_add "Add a Question", :questions %></p>
  </p>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

最佳答案

我试图关注这个 railscast ,但我想使用 mongodb,我使用的是 gem mongomodel要做到这一点。我无法做我想做的事,因为我收到了上述错误,甚至对于“删除”按钮,我也遇到了另一个我现在不记得的错误。不管怎样,我真的不能用 mongomodel 做我想做的事,所以我试着用 mongoid 来做。一切都变得更容易了。

关于ruby-on-rails - 使用 mongodb 嵌套字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13182651/

相关文章:

ruby-on-rails - cucumber 步骤中的正则表达式

ruby-on-rails - 如何将字符串转换为 ActiveSupport::TimeWithZone?

html - 从 DOM 使用 Nokogiri 获取背景图像?

ruby-on-rails - 如何索引 MongoDB 或 Mongoid 中的哈希字段?

ruby-on-rails - Ruby 中二维数组中超出范围的值

ruby-on-rails - 闲置/闲置后自动注销

ruby-on-rails - NoMethodError(Heroku 的 Logger 未定义方法 `flush'

ruby - has_many 的 Rails 5 动态条件

javascript - Node.js 和 mongodb TypeError : undefined is not a function

mongodb - 获取聚合中嵌套数组的总和