0

最近、新しいモデル (discussion.rb) とコントローラー (discussions_controller.rb) を追加しました。投稿コメントをディスカッションで使用できるようにしようとしています。

ディスカッション.rb

class Discussion < ActiveRecord::Base

  belongs_to :user
  has_many :postcomments, dependent: :destroy
  validates :user_id, presence: true
  validates :content, presence: true

  attr_accessible :content, :user_id

  default_scope order: 'discussions.created_at DESC'
end

これが私がルートに持っているものです

resources :discussions, :path => "disc"

resources :users do
  member do
    get :following, :followers
  end
end
resources :sessions, only: [:new, :create, :destroy]
resources :microposts, only: [:create, :destroy]
resources :discussions, only: [:create, :destroy]
resources :relationships, only: [:create, :destroy]
resources :microposts do
  resources :postcomments
  resources :discussions do
    resources :postcomments
  end
end

これがコメント投稿モデルです

class Postcomment < ActiveRecord::Base


  attr_accessible :comment_content

  belongs_to :user
  belongs_to :micropost
  belongs_to :discussion

  validates :comment_content, presence: true
  validates :user_id, presence: true

  default_scope order: 'postcomments.created_at ASC'
end

これをビューで使用しようとしていますが、タイトルにエラーが投稿されます

<%= form_for([discussion, @comment]) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
  <div class="field">
    <%= f.text_field :comment_content %>
  </div>
  <div class="ItemContainer">
<div class="ItemInput">
    <button class="btn" type="submit">
    Comment
  </button>
  </div><div class="ItemCommentCount">
<% end %>

エラーはこの行から発生したと書かれています

 <%= form_for([discussion, @comment]) do |f| %>

pathこの問題を解決する方法を知っている人はいますか?

class PostcommentsController < ApplicationController
def create
    @micropost = Micropost.find(params[:micropost_id])
    @comment = Postcomment.new(params[:postcomment])
    @comment.micropost = @micropost
    @comment.user = current_user
    if @comment.save
       redirect_to(:back)
    else
      render partial: 'shared/_postcomment_form', locals: { micropost: @micropost }
    end
  end

def createdisc
    @discussion = Discussion.find(params[:discussion_id])
    @comment = Postcomment.new(params[:postcomment])
    @comment.discussion = @discussion
    @comment.user = current_user
    if @comment.save
       redirect_to(:back)
    else
      render partial: 'shared/_postcomment_form', locals: { discussion: @discussion}
    end
  end

end
4

2 に答える 2

0

resources :discussionsルート ファイルでの使用を統合してみてください。マイクロポストの下にディスカッションをネストするつもりはないと仮定して、以下を編集しました。

resources :discussions, only: [:create, :destroy], path: "disc" do
  resources :postcomments
end
resources :users do
  member do
    get :following, :followers
  end
end
resources :sessions, only: [:new, :create, :destroy]
resources :microposts, only: [:create, :destroy]
resources :relationships, only: [:create, :destroy]
resources :microposts do
  resources :postcomments
end
于 2013-05-09T03:20:09.317 に答える
0

この行

<%= form_for([discussion, @comment]) do |f| %>

これdiscussionもインスタンス変数である必要があります。

<%= form_for([@discussion, @comment]) do |f| %>

次に、コントローラーで @discussion を定義する必要があります

于 2013-05-09T03:24:21.107 に答える