无法使用accepts_nested_attributes_for通过单词创建答案

时间:2016-11-29 07:43:15

标签: ruby-on-rails

我是RoR的新手。我尝试使用accepts_nested_attributes_for通过文字控制器创建答案,但是当我点击提交按钮时,我什么都没得到,按钮被禁用。

这是我的代码。

word.rb

class Word < ApplicationRecord
   belongs_to :category
   belongs_to :exam
   has_many :answers, dependent: :destroy
   accepts_nested_attributes_for :answers
   has_many :exam_words, dependent: :destroy
   scope :alphabet, ->{order :content}
end

answer.rb

class Answer < ApplicationRecord
  belongs_to :wordscope :alphabel, ->{order "content"}
  validates :content, presence: true
end

new.html.erb

<% provide(:title, "Create word" )%>
<h1></h1>
  <%= form_for @word do |f| %>
      <%= f.label :word_content %>
      <%= f.text_field :content, class: "form-control" %>
      <%= f.fields_for :answers do |answer| %>
        <%= answer.label :answer_content %>
        <%= answer.text_area :content, class: "form-control" %>
        <%= answer.label :is_correct %>
        <%= answer.check_box :is_correct %>
      <%end%>
  <%= f.submit "create", class: "btn btn-primary"%>
  <%end%>

words_controller.rb

 class WordsController < ApplicationController
before_action :load_category, except: [:show, :new]

  def index
    @words = @category.words.includes(:answers).paginate(page: params[:page])
  end

  def new
    @word = Word.new
    @word.answers.new
  end

  def show
    @word = Word.find_by_id(params[:id])
    session[:w_id] = @word.id
  end

  def create
    @word = @category.words.new(word_params)
    @word.category_id = session[:cat_id]
    @word.exam_id = 1
    if @word.save
      redirect_to category_path(session[:cat_id])
    end
  end

  def destroy
    @word = Word.find(params[:id])
    if @word.present?
      @word.destroy
    end
    redirect_to :back
  end

  def edit
    @word = Word.find(params[:id])
  end

  def update
    @word = Word.find(params[:id])
    if @word.update_attributes(word_params)
        flash[:success] = "Updated"
        redirect_to category_path(session[:cat_id])
      else
        render 'edit'
      end
  end

  private

  def word_params
    params.require(:word).permit :content,
      answers_attributes: [:id, :content, :is_correct]
  end

  def load_category
    @category = Category.find_by id: session[:cat_id]
    unless @category
      flash[:danger] = t "category_not_found"
      redirect_to categories_path
    end
  end
end

这是我在终端

中的服务器中获得的
Started POST "/words" for 127.0.0.1 at 2016-11-29 14:52:26 +0000
Processing by WordsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"qr4qCFAh6omymmgJK7aOjZO0HFtkyT3uwB0KGl6EL60MOipdCFgS0l+XwEi7adhPt1uF1TL2RdRGwsK79FX3iw==", "word"=>{"content"=>"new", "answers_attributes"=>{"0"=>{"content"=>"moi", "is_correct"=>"1"}}}, "commit"=>"create"}
  Category Load (0.9ms)  SELECT  "categories".* FROM "categories" WHERE "categories"."id" = ? LIMIT ?  [["id", 1], ["LIMIT", 1]]
   (0.2ms)  begin transaction
  Exam Load (0.3ms)  SELECT  "exams".* FROM "exams" WHERE "exams"."id" = ? LIMIT ?  [["id", 1], ["LIMIT", 1]]
   (0.4ms)  rollback transaction
No template found for WordsController#create, rendering head :no_content
Completed 204 No Content in 48ms (ActiveRecord: 2.7ms)

This is what show in my local web

==============解决========================

我只是想知道如何解决,我忘了optional: true中的answer.rd

class Answer < ApplicationRecord
  belongs_to :word, optional: true
  scope :alphabel, ->{order "content"}
  validates :content, presence: true
end

0 个答案:

没有答案