2012-11-01 4 views
6

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 %> 
+0

내가 사용한베이스 레일 캐스트는 [railscast 196]입니다 (http://railscasts.com/episodes/196-nested-model-form-part-1). 두 번째 부분에서는 reflection_on_association 메서드를 사용하고 nested_form과 관련된 문제와 동일한 문제가 발생합니다. – lucianthomaz

+0

나는 보석 (mongoid) (http://mongoid.org/en/mongoid/index.html)을 사용하여 내가 원하는 것을 얻었습니다. 나는 그것이 불가능하다고 생각했지만 틀렸어. 몽고 이드는 내가하려고했던 것을 완벽하게했는데, 몽고델보다 훨씬 쉽고 아무런 문제가 없었다. – lucianthomaz

+2

해답을 주석에 넣는 대신 질문에 대한 답으로 추가하십시오. 그런 다음 답을 수락하고 질문을 올바르게 닫을 수도 있습니다. – JohnnyHK

답변

1

. 위에서 설명한 오류가 발생했기 때문에 원하는 작업을 수행 할 수 없었으며 "제거"버튼에도 지금 기억할 수없는 또 다른 오류가 있습니다. 어쨌든, 나는 몽고델을 사용하여 원했던 것을 정말로 할 수 없었기 때문에, 나는 mongoid을 사용하여 그것을 시도했다. 그리고 모든 것이 더 쉬워졌다.