Rails 4:编辑/更新主题,编辑/更新帖子

时间:2015-11-18 15:33:56

标签: ruby-on-rails ruby ruby-on-rails-4

在开始之前我知道我需要在帖子和线程控制器中进行编辑和更新功能,但我遇到的问题是更新中丢失了forum_post.user详细信息,并且更新后线程重复帖子,所以我完全删除了代码,因此我可以通过自己发布控制器来帮助解决问题。

但是你要发布路线,在我发布之前/论坛/只是一个假的路线来嵌套forum_threads / posts并且不存在于其范围之外。

Rake Routes输出

   Prefix Verb   URI Pattern                                                          Controller#Action
            new_user_session GET    /users/sign_in(.:format)                                             devise/sessions#new
                user_session POST   /users/sign_in(.:format)                                             devise/sessions#create
        destroy_user_session DELETE /users/sign_out(.:format)                                            devise/sessions#destroy
               user_password POST   /users/password(.:format)                                            devise/passwords#create
           new_user_password GET    /users/password/new(.:format)                                        devise/passwords#new
          edit_user_password GET    /users/password/edit(.:format)                                       devise/passwords#edit
                             PATCH  /users/password(.:format)                                            devise/passwords#update
                             PUT    /users/password(.:format)                                            devise/passwords#update
    cancel_user_registration GET    /users/cancel(.:format)                                              devise/registrations#cancel
           user_registration POST   /users(.:format)                                                     devise/registrations#create
       new_user_registration GET    /users/sign_up(.:format)                                             devise/registrations#new
      edit_user_registration GET    /users/edit(.:format)                                                devise/registrations#edit
                             PATCH  /users(.:format)                                                     devise/registrations#update
                             PUT    /users(.:format)                                                     devise/registrations#update
                             DELETE /users(.:format)                                                     devise/registrations#destroy
    forum_thread_forum_posts GET    /forum/forum_threads/:forum_thread_id/forum_posts(.:format)          forum_threads/forum_posts#index
                             POST   /forum/forum_threads/:forum_thread_id/forum_posts(.:format)          forum_threads/forum_posts#create
 new_forum_thread_forum_post GET    /forum/forum_threads/:forum_thread_id/forum_posts/new(.:format)      forum_threads/forum_posts#new
edit_forum_thread_forum_post GET    /forum/forum_threads/:forum_thread_id/forum_posts/:id/edit(.:format) forum_threads/forum_posts#edit
     forum_thread_forum_post GET    /forum/forum_threads/:forum_thread_id/forum_posts/:id(.:format)      forum_threads/forum_posts#show
                             PATCH  /forum/forum_threads/:forum_thread_id/forum_posts/:id(.:format)      forum_threads/forum_posts#update
                             PUT    /forum/forum_threads/:forum_thread_id/forum_posts/:id(.:format)      forum_threads/forum_posts#update
                             DELETE /forum/forum_threads/:forum_thread_id/forum_posts/:id(.:format)      forum_threads/forum_posts#destroy
               forum_threads GET    /forum/forum_threads(.:format)                                       forum_threads#index
                             POST   /forum/forum_threads(.:format)                                       forum_threads#create
            new_forum_thread GET    /forum/forum_threads/new(.:format)                                   forum_threads#new
           edit_forum_thread GET    /forum/forum_threads/:id/edit(.:format)                              forum_threads#edit
                forum_thread GET    /forum/forum_threads/:id(.:format)                                   forum_threads#show
                             PATCH  /forum/forum_threads/:id(.:format)                                   forum_threads#update
                             PUT    /forum/forum_threads/:id(.:format)                                   forum_threads#update
                             DELETE /forum/forum_threads/:id(.:format)                                   forum_threads#destroy
                import_users POST   /users/import(.:format)                                              users#import
                       users GET    /users(.:format)                                                     users#index
                             POST   /users(.:format)                                                     users#create
                    new_user GET    /users/new(.:format)                                                 users#new
                   edit_user GET    /users/:id/edit(.:format)                                            users#edit
                        user GET    /users/:id(.:format)                                                 users#show
                             PATCH  /users/:id(.:format)                                                 users#update
                             PUT    /users/:id(.:format)                                                 users#update
                             DELETE /users/:id(.:format)                                                 users#destroy
                        root GET    /                                                                    forum_threads#index

路线:

Rails.application.routes.draw do
devise_for :users
  scope "/forum" do
        resources :forum_threads do
                resources :forum_posts, module: :forum_threads
        end
  end

  resources :users do
    collection do
      post :import
    end
  end
root 'forum_threads#index'
end

论坛主题控制器

class ForumThreadsController < ApplicationController
  before_action :authenticate_user!, except: [:index, :show]
  before_action :set_forum_thread, except: [:index, :new, :create]

  def index
    @q = ForumThread.search(params[:q])
    @forum_threads = @q.result(distinct: true)
  end

  def show
    @forum_post = ForumPost.new
  end

  def new
    @forum_thread = ForumThread.new
    @forum_thread.forum_posts.new
  end

  def create
    @forum_thread = current_user.forum_threads.new forum_thread_params
    @forum_thread.forum_posts.first.user_id = current_user.id

    if @forum_thread.save
      redirect_to @forum_thread
    else
      render action: :new
    end
  end

  def destroy
    @forum_thread.destroy
    redirect_to root_path
  end

  private

    def set_forum_thread
      @forum_thread = ForumThread.find(params[:id])
    end

    def forum_thread_params
      params.require(:forum_thread).permit(:subject, forum_posts_attributes: [:body])
    end
end

论坛帖子控制器

class ForumThreads::ForumPostsController < ApplicationController
  before_action :authenticate_user!
  before_action :set_forum_thread

  def create
    @forum_post = @forum_thread.forum_posts.new forum_post_params
    @forum_post.user = current_user

    if @forum_post.save
      redirect_to forum_thread_path(@forum_thread, anchor: "forum_post_#{@forum_post.id}"), notice: "Successfully posted!"
    else
      redirect_to @forum_thread, alert: "Unable to save your post"
    end
  end

  private

    def set_forum_thread
      @forum_thread = ForumThread.find(params[:forum_thread_id])
    end

    def forum_post_params
      params.require(:forum_post).permit(:body)
    end
end

我知道link_to的论坛编辑路径将是edit_forum_thread_path或者只是纠正我,如果我错了,但这是我需要帮助的帖子编辑/删除路径,因为该控制器嵌套在forum_threads下并使用模块forum_threads,I最初认为它将是edit_forum_threads_forum_posts_path,但这不是我上次尝试删除这些功能之前。

1 个答案:

答案 0 :(得分:0)

根据您的edit_forum_thread_forum_post_path输出,rake routes