Routes do not work properly

EDIT: Thanks for the answers, I tried all of the following, but good luck now. If I type localhosts / posts / new, it takes me to the form, however the link does not work when I click on the navigation bar. I updated the code and included the results of my rake routes.

I am new to ruby ​​and working on a tutorial, however one of my links is broken and not sure what is going on.

My navigation link for creating a new post does not lead me to the correct page, when I click on the "posts_path" link, the page does not change.

I can create new posts by typing / posts / new in the address bar, but when I click the "New post" link in the navigation bar, the page does not refresh (although the url displays / posts posts). Any idea how to fix this?

config / routes.rb

Rails.application.routes.draw do
get 'sessions/new'
root 'static_pages#home'
get  '/search', to: 'static_pages#search'
get  '/login', to: 'sessions#new'
get  '/posts', to: 'posts#new', as: 'new_post'
post  '/login', to: 'sessions#create'
delete  '/logout', to: 'sessions#destroy'
get  '/signup', to: 'users#new'
get 'users/new'
get 'static_pages/home'
get 'posts/new'
get 'sessions/new'
resources :users
resources :account_activations, only: [:edit]
resources :password_resets, only: [:new, :create, :edit, :update]
resources :posts, only: [:new, :create, :destroy]
end

application / views / layouts / _header.html.erb

<header class="navbar navbar-fixed-top navbar-inverse">
<div class="container">
  <% link_to "sample app", root_path, id: "logo" %>
    <nav>
      <ul class="nav navbar-nav navbar-right">
        <li><%= link_to "Home", root_path %></li>
        <li><%= link_to "Search", search_path %></li>
          <% if logged_in? %>
            <li><%= link_to "Users", users_path %></li>
            <li><%= link_to "Posts", posts_new_path %></li>
            <li class="dropdown">
             <a href='#' class="dropdown-toggle" data-toggle="dropdown">Account <b class="caret"></b></a>
             <ul class="dropdown-menu">
              <li><%= link_to "Profile", current_user %></li>
              <li><%= link_to "Settings", edit_user_path(current_user) %></li>
              <li class="divider"></li>
              <li><%= link_to "Logout", logout_path, method: "delete" %></li>
             </ul>
           </li>
           <% else %>
             <li><%= link_to "Log in", login_path %></li>
           <% end %>
          </ul>
       </nav>
  </div>

posts_controller.rb

class PostsController < ApplicationController
    before_action :logged_in_user, only: [:create, :destroy]
    before_action :correct_user, only: :destroy

    def create
            @post = current_user.posts.build(post_params)
            if @post.save
                    flash[:success] = "Post created!"
                    redirect_to root_url
            else
                    @feed_items = []
                    render 'static_pages/home'
            end
    end

    def destroy
            @post.destroy
            flash[:success] = "Post Deleted"
            redirect_to request.referrer || root_url
    end
    def new
       @post = current_user.posts.build if logged_in?
    end

    private

    def post_params
            params.require(:post).permit(:description, :picture)
    end

    def correct_user
            @post = current_user.posts.find_by(id:params[:id])
            redirect_to root_url if @post.nil?
    end
end

rake routes:

password_resets_new     GET     /password_resets/new(.:format)          password_resets#new
password_resets_edit    GET     /password_resets/edit(.:format)         password_resets#edit
sessions_new            GET     /sessions/new(.:format)                 sessions#new
root                    GET     /                                       static_pages#home
search                  GET     /search(.:format)                       static_pages#search
login                   GET     /login(.:format)                        sessions#new
new_post                GET     /posts(.:format)                        posts#new
                        POST    /login(.:format)                        sessions#create
logout                  DELETE  /logout(.:format)                       sessions#destroy
signup                  GET     /signup(.:format)                       users#new
users_new               GET     /users/new(.:format)                    users#new
static_pages_home       GET     /static_pages/home(.:format)            static_pages#home
static_pages_about      GET     /static_pages/about(.:format)           static_pages#about
static_pages_search     GET     /static_pages/search(.:format)          static_pages#search
posts_new               GET     /posts/new(.:format)                    posts#new
                        GET     /password_resets/new(.:format)          password_resets#new
                        GET     /password_resets/edit(.:format)         password_resets#edit
                        GET     /sessions/new(.:format)                 sessions#new
help                    GET     /help(.:format)                         static_pages#help
about                   GET     /about(.:format)                        static_pages#about
contact                 GET     /contact(.:format)                      static_pages#contact
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
edit_account_activation GET     /account_activations/:id/edit(.:format) account_activations#edit
password_resets         POST    /password_resets(.:format)              password_resets#create
new_password_reset      GET     /password_resets/new(.:format)          password_resets#new
edit_password_reset     GET     /password_resets/:id/edit(.:format)     password_resets#edit
password_reset          PATCH   /password_resets/:id(.:format)          password_resets#update
                        PUT     /password_resets/:id(.:format)          password_resets#update
posts                   POST    /posts(.:format)                        posts#create
                        GET     /posts/new(.:format)                    posts#new
post                    DELETE  /posts/:id(.:format)                    posts#destroy
+4
source share
11 answers

Rails i.e. routes.rb. , , , # , , ( ).

, .    /routes.rb

Rails.application.routes.draw do
get 'sessions/new'
root 'static_pages#home'
get  '/search', to: 'static_pages#search'
get  '/login', to: 'sessions#new'
#get  '/posts', to: 'posts#new', as: 'new_post' #not required as resources :posts will do the job in last line
post  '/login', to: 'sessions#create'
delete  '/logout', to: 'sessions#destroy'
get  '/signup', to: 'users#new'
get 'users/new'
get 'static_pages/home'
get 'posts/new', to: 'posts#new', as: 'posts_new_path'  #Made changes here according to helper used in view 'posts_new_path'
get 'sessions/new'
resources :users
resources :account_activations, only: [:edit]
resources :password_resets, only: [:new, :create, :edit, :update]
resources :posts, only: [:new, :create, :destroy]
end 
+1

get 'sessions/new' get '/posts', to: 'posts#new', as: 'new_post'

link_to "Posts", new_post_path, method: :post

+3

, get 'posts/new' get '/posts', to: 'posts#new', as: 'new_post', .

, resources :posts, only: [:new, :create, :destroy]. new, Rails . . : http://guides.rubyonrails.org/v4.2/routing.html#crud-verbs-and-actions

, . <%= link_to "New Post", new_post_path %> : http://guides.rubyonrails.org/v4.2/routing.html#path-and-url-helpers

+2

, . new

get /posts', to: 'posts#new', as: 'new_post'

resources :posts, only: [:new, :create, :destroy]

posts#new 2 . u . html

<li><%= link_to 'New Post', posts_path %></li>

.

+2

... , / .. , :).

  • routes.rb, BUT   url entry.So get 'posts/new', resources :posts, only: [:new, :create, :destroy], posts#new. , txt rake routes >> path.txt
  • app/views/layouts/_header.html.erb, .
  • posts_controller.rb, . , , .
  • , F12 chrome/firefox , - , , - javascript .
+2

<%= link_to "New Post", new_post_path %>
+1

new_post_path

, rake routes .

, 'as' : get '/posts', to: 'posts#new', as: 'new_post' ( new_post_path, ).

+1
<%= link_to "Posts", posts_path %> corresponds to index action not to the new action.

routes.rb, , .

resources :posts

, new_post_path /posts/new

, link <%= link_to 'New Post', new_post_path %>

+1

,
routes.rb,

resources :posts  

, , , , , , , . . , ,

new_post GET      /posts/new(.:format)                    posts#new  

, , url ,

<%= link_to 'New Post', new_post_path %>
html.erb. url . Rb.

URL . html

<%= button_tag "New", :onclick => "getNew()" %>   
function getNew(){
        var form = document.forms[0];
        // get the id and value with any variable // 
        form.method = "post";       
        // pass the value to parameters //
        form.var name = column name; (description r picture) 
        form.action = "posts/new";
        form.submit();
    }  

routes.rb,

match '/posts/new' => 'posts#new', via: [:get, :post]  

URL- . .
!

+1

- :

<%= link_to "New Post", posts_new_path %>

, , .

+1

, - -Rails. Rails , , Rails-, .

, , . 3 , posts#new, .

:

  • get '/posts', to: 'posts#new', as: 'new_post'
  • get 'posts/new'

resources :posts, only: [:new, :create, :destroy] . new_post_path URL-, .

+1

Source: https://habr.com/ru/post/1665676/


All Articles