2

現在、Rails 4 を使用して Web サイトを作成しています。別のモデル「応答」を使用して、モデル「投稿」内にモデル「候補」のフォームを作成する必要があります。

これはポストモデルです:

class Post < ActiveRecord::Base



validates :title, presence: true,
                  length: { minimum: 5 }

belongs_to :entrepreneur

belongs_to :categorie

has_many :candidatures

accepts_nested_attributes_for :candidatures

has_many :questions

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

end

立候補モデル :

class Candidature < ActiveRecord::Base
has_many :reponses
accepts_nested_attributes_for :reponses, :allow_destroy => true
end

そして応答モデル:

class Reponse < ActiveRecord::Base
belongs_to :candidature
end

私は必要ないと思うので、立候補と応答のためのコントローラーを持っていません (私が間違っている場合は訂正してください)。プロジェクトである投稿を作成し、投稿の表示ビューで、ゲストが回答を通じていくつかの質問に回答できるフォームを作成する必要があり、それらの回答はすべて 1 つの候補に保存する必要があります。

schema.rb は次のようになります。

ActiveRecord::Schema.define(version: 20130718083016) do

 create_table "candidatures", force: true do |t|
 t.datetime "created_at"
 t.datetime "updated_at"
 t.integer  "post_id"
 end

 create_table "questions", force: true do |t|
 t.datetime "created_at"
 t.datetime "updated_at"
 t.integer  "post_id"
 t.text     "enonce"
 end

 create_table "reponses", force: true do |t|
 t.integer  "candidature_id"
 t.datetime "created_at"
 t.datetime "updated_at"
 t.text     "enonce"
 end

 create_table "posts", force: true do |t|
 t.string   "title"
 t.datetime "created_at"
 t.datetime "updated_at"
 t.text     "defi"
 t.text     "mission"
 t.text     "competences"
 t.text     "gain"
 t.text     "lieny"
 t.text     "liendb"
 t.string   "link"
 end

post のコントローラー:

class PostsController < ApplicationController
    layout :resolve_layout
    include Candidaturetopost

def new
    @post = Post.new
end

def create
    @post = Post.new(post_params)

    if @post.save
        flash[:notice] = "Successfully created project."
        redirect_to @post
    else 
        render 'new'
    end
end

def show
    @post = Post.find(params[:id])
    @post.candidatures.build

end

def index
    @posts = Post.all
end

def edit
    @post = Post.find(params[:id])
end


def update
    @post = Post.find(params[:id])
    if @post.update(post_params)
        redirect_to @post
    else
        render 'edit'
    end
end





def destroy
    @post = Post.find(params[:id])
    @post.destroy

    redirect_to posts_path
end


private 

def post_params
    params.require(:post).permit(:title, :image, :defi, :mission, :competences, :gain, :lieny, :liendb, :link, questions_attributes: [:enonce, :post_id, :id, :_destroy], 
                                 candidatures_attributes: [:post_id, :id, reponses_attributes: [:candidature_id, :id, :enonce]])
end

私が働こうとしたショービュー:

<%= form_for @post do |f| %>
<%= f.fields_for :candidatures do |cform| %>

<ol>
<% for question in @post.questions %>
<li><%= question.enonce %></li>
<%= cform.fields_for :reponses do |rform| %>
   <%= rform.text_area :enonce %>
    <% end %>

 <% end %>
 </ol>
 <%= cform.submit %>

 <% end %>

 <% end %>

ここに示すコードでは、enonce の text_area も表示されません。

私がやりたいことは可能ですか?そうでない場合、どうすれば似たようなものを手に入れることができますか?

4

2 に答える 2

0

あなたは正しかった、それはあまりにも複雑だった. これを使用して動作させることができました.3つのモデル間で必要なリンクができました.

于 2013-07-19T10:36:43.773 に答える