mongodb를 사용하여 중첩 된 필드를 만들려고합니다. 그것을 위해 나는 mongomodel 루비 및 mongodb와 함께 작업 할 수있는 보석을 사용하고 있는데 보석 nested_form을 사용하여 중첩 된 필드를 만들었습니다. 난 정말 내가 MongoDB를 여기 수행 할 작업과 일치하지 않는 인터넷에서 발견 한 것으로,mongodb가있는 중첩 된 필드
다른 오류가 좋아 #`에 대한
undefined method
reflect_on_association ': 나는 다음과 같은 문제가 있습니다. 나는 RoR에 익숙하지 않으며 이것을 해결하는 방법을 모른다. 누구든지 나를 도울 수 있습니까? 여기
survey.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
questions.rb
class Question < MongoModel::Document
property :content, String
timestamps!
end
내 컨트롤러 :
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
내 gemfile :
설문 조사의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'
내보기 :이 railscast을 따르려고 노력했지만, 내가 MongoDB를 작업하고 싶어, 나는 그렇게 보석 mongomodel을 사용했다
_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 196]입니다 (http://railscasts.com/episodes/196-nested-model-form-part-1). 두 번째 부분에서는 reflection_on_association 메서드를 사용하고 nested_form과 관련된 문제와 동일한 문제가 발생합니다. – lucianthomaz
나는 보석 (mongoid) (http://mongoid.org/en/mongoid/index.html)을 사용하여 내가 원하는 것을 얻었습니다. 나는 그것이 불가능하다고 생각했지만 틀렸어. 몽고 이드는 내가하려고했던 것을 완벽하게했는데, 몽고델보다 훨씬 쉽고 아무런 문제가 없었다. – lucianthomaz
해답을 주석에 넣는 대신 질문에 대한 답으로 추가하십시오. 그런 다음 답을 수락하고 질문을 올바르게 닫을 수도 있습니다. – JohnnyHK