2015-09-29 3 views
0

Это проблема, которая у меня есть, не удалось обойти его. Теперь это происходит при входе в учетную запись. У меня не было этой проблемы до прошлой ночи. enter image description hereНет совпадений маршрутов {: action => "index",: controller => "comments",: post_id => nil} missing required keys: [: post_id]

Вот мой users_controller.rb,

class UsersController < ApplicationController 
    before_action :set_user, only: [:edit, :update, :destroy] 
    before_action :correct_user, only: [:edit ] 

    after_action :signed_in_after_register, only: :create 

    def index 
    @users = User.all 
    @user = User.find(session[:user_id]) 
    if params[:search] 
     @users = User.search(params[:search]).order("created_at DESC") 
     else 
     @users = User.all.order('created_at DESC') 
     end 
    end 

    def dashboard 
    @user = User.find(session[:user_id]) unless session[:user_id] == "" 
    redirect_to login_path, notice: "You're not logged in" unless @user 
    @posts = @user.posts.order("created_at DESC").limit(3) 
    @comment = Comment.new 
    @post = Post.new 
    end 

    def newsfeed 
    @user = User.find(session[:user_id]) unless session[:user_id] == nil 
    redirect_to login_path, notice: "You're not logged in" unless @user 
    @posts = @user.posts.order("created_at DESC").limit(3) 
    end 

    def nav 
    @user = User.find(session[:user_id]) 
    end 
    def posts 
    @user = User.find(session[:user_id]) 
    @posts = @user.posts 
    end 

    def destroy 
    @user = User.find(session[:user_id]) unless session[:user_id] == "" 
    redirect_to login_path, notice: "You're not logged in" unless @user 
    end 

    def welcome 
    @user = User.find(params[:user_id]) unless session[:user_id] == "" 
    redirect_to login_path, notice: "You're not logged in" unless @user 
    @user = User.find(session[:user_id]) 
    end 
    def show 
    @user = User.find(params[:user_id]) unless session[:user_id] == "" 
    redirect_to login_path, notice: "You're not logged in" unless @user 
    @posts = @user.posts.order("created_at DESC").limit(3) 
    @comment = Comment.new 
    @post = Post.new 
    end 

    def new 
    @user = User.new 
    @post = Post.new(params[:post_id]) 
    end 

    def edit 
    @user = User.find(params[:user_id]) if params[:user_id] 
    redirect_to @dashboard_path unless @user 
    end 

    def create 
    @user = User.new(user_params) 

    respond_to do |format| 
     if @user.save 
     format.html { redirect_to dashboard_path, notice: 'User was successfully created!' } 
     format.json { render :profile, status: :created, location: @user } 
     else 
     format.html { render :new } 
     format.json { render json: @user.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    def update 
    if @user == current_user 
     respond_to do |format| 
     if @user.update(user_params) 
      format.html { redirect_to dashboard_path, notice: 'User was successfully updated.' } 
      format.json { render :profile, status: :ok, location: @user } 
     else 
      format.html { render :edit } 
      format.json { render json: @user.errors, status: :unprocessable_entity } 
     end 
     end 
    else 
     redirect_to dashboard_path, notice: 'You do not have permission to edit the profile of another user.' 
    end 
    end 

    def destroy 
    @user.destroy 
    respond_to do |format| 
     format.html { redirect_to users_url, notice: 'User was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    private 
    def set_user 
     @user = User.find(params[:id]) 
    end 
    def correct_user 
     @user = User.find(params[:id]) unless session[:user_id] == "" 

    end 
    def signed_in_after_register 
     session[:user_id] = @user.id 
    end 

    def user_params 
     params.require(:user).permit(:first_name, :last_name, :bio, :comments, :password, :password_confirmation, :email, :age, :profile_picture, :post, :body) 
    end 
end 

Heres мой комментарий _form.html.erb,

<%= form_for([@post, @comment]) do |f| %> 
    <p> 
     <%= f.text_area :body, placeholder: "Write a comment!" %> 
    </p> 
    <br> 
    <p> <%= f.submit %> </p> 

<% end %> 

А вот мой routes.rb,

Rails.application.routes.draw do 

    root 'welcome#welcome' 

    get 'login' => 'sessions#login', :as => :login 

    get 'dashboard' => 'users#dashboard', :as => :dashboard 

    post 'logging/user' => 'sessions#create' 

    get 'logout' => 'sessions#destroy', :as => :logout 

    get 'about' => 'about' 

    get 'newsfeed' => 'users#newsfeed' 

    resources :users, except: :show 
    get 'profile/:user_id' => 'users#show', as: :profile 

    get 'location' => 'location#location' 

    resources :posts do 
    resources :comments 
    end 

    get 'index' => 'posts#index' 

    get 'register' => 'users#new', :as => :register 

end 

Если вы, ребята, больше не видите код, просто сообщите мне, я отправлю его! Огромное спасибо заранее!

+0

я. Вот что это за форма. –

+0

, если вы перейдете сюда http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html и выполните поиск «Если ваш ресурс имеет определенные ассоциации, например», вы увидите пример синтаксиса, который вы используете , И он говорит, что он будет работать только тогда, когда (в вашем случае) «@post» - это существующий объект (сохраненный в базе данных), вы будете добавлять комментарий к этому сообщению. И то, что я вижу в вашем коде, это то, что @post также является новым объектом. – fanta

+0

Можете ли вы добавить файл comments_controller.rb, так как это окажется там, где проблема, на основе короткой трассировки стека, которую мы можем видеть из вашего скриншота. Кроме того, еще несколько строк из вашего development.log могут быть полезны при отображении большего количества ошибок, чем может показать скриншот. – Phil

ответ

0

Проблема заключается в том, что вы пытаетесь создать URL-адрес, который выглядит следующим образом: /posts/:post_id/comments, минуя form_for([@post, @comment]). Все нормально, что @comment не сохранен в базе данных, но @post, который вы используете , уже должен быть сохранен в базе данных, потому что вы не можете создать этот URL без @post с идентификатором.

После того, как @post сохранен, он будет иметь идентификатор, чтобы вы могли сгенерировать маршрут: например, /posts/32/comments.

Проверьте файл dashboard.html.erb, где вы используете @posts и рендеринга comments/_form.html.erb. Возможно, у вас есть объект post, и вы должны использовать его в своей форме: form_for([post, @comment]).

Возможно, вы также захотите удалить линию @post = Post.new от вашего действия контроллера #dashboard.

+0

В любом случае вы можете объяснить немного больше? Сделав то, что вы сказали об удалении @post, я получаю следующую ошибку на этом url/posts /: post_id/comments. Не удалось найти сообщение с 'id' = 24 –

Смежные вопросы