Ruby on rails 没有与[POST]匹配的路线”/经验/索引“;
我是Rails的新手,一直在开发web应用程序,一定是在开发过程中弄坏了什么东西。创建新的“体验”时,我收到错误“无路线匹配[POST]”/experiences/index“。我已尝试添加“POST”experiences#index”以停止错误,但没有创建体验 routes.rbRuby on rails 没有与[POST]匹配的路线”/经验/索引“;,ruby-on-rails,Ruby On Rails,我是Rails的新手,一直在开发web应用程序,一定是在开发过程中弄坏了什么东西。创建新的“体验”时,我收到错误“无路线匹配[POST]”/experiences/index“。我已尝试添加“POST”experiences#index”以停止错误,但没有创建体验 routes.rb Rails.application.routes.draw do mount RailsAdmin::Engine => '/admin', as: 'rails_admin'
Rails.application.routes.draw do
mount RailsAdmin::Engine => '/admin', as: 'rails_admin'
resource :experiences do
member do
get 'dashboard'
get 'index'
get 'bookings'
end
end
resources :experiences, except: [:edit] do
member do
get 'listing'
get 'pricing'
get 'description'
get 'photo_upload'
get 'amenities'
get 'location'
get 'about'
get 'subcats'
get 'languages'
get 'timeslots'
end
resources :photos, only: [:create, :destroy]
resources :timeslots, only: [:create, :destroy]
resources :reservations, only: [:create]
resources :calendars
end
resources :experiences do
resources :subcategories
end
resources :subcategories do
resources :experiences
end
resources :categories do
resources :experiences
resources :subcategories
end
devise_for :users, controllers: {
sessions: 'users/sessions',
passwords: 'users/passwords',
registrations: 'users/registrations'
}
namespace :admin do
get '', to: 'dashboard#index', as: '/'
end
resources :host_requests do
resources :users
end
resources :static_pages do
resources :users
end
resources :users, only: [:show]
get '/host_calendar' => "calendars#host"
get 'search' => 'static_pages#search'
root to: "static_pages#home"
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end
class ExperiencesController < ApplicationController
before_action :set_experience, only: [:show, :edit, :update, :destroy, :listing, :pricing, :description, :photo_upload, :amenities, :location, :subcats, :languages, :about, :timeslots]
before_action :set_subcategories, only: [:subcats]
before_action :set_languages, only: [:languages]
before_action :set_amenities, only: [:amenities]
before_action :is_authorised, except: [:show, :index, :new, :create, :dashboard, :bookings]
before_action :authenticate_user!
load_and_authorize_resource
# GET /experiences
# GET /experiences.json
def index
if current_user.admin_role?
redirect_to admin_url
elsif current_user.host_role?
@experiences = current_user.experiences
else
@experiences = Experience.published
end
end
def dashboard
if current_user.admin_role?
redirect_to admin_url
elsif current_user.host_role?
@experiences = current_user.experiences
else
redirect_to root_path, alert: "You don't have permission. Apply to be a host!"
end
end
# GET /experiences/1
# GET /experiences/1.json
def show
if current_user.user_role?
if !@experience.published?
redirect_to root_path, alert: "You don't have permission."
end
end
@base_latitude = @experience.latitude
@base_longitude = @experience.longitude
@base_timezone = Timezone.lookup(@base_latitude, @base_longitude)
@timezone_name = @base_timezone.name
end
# GET /experiences/new
def new
@experience = current_user.experiences.new
@categories = Category.all.map{|c| [ c.name, c.id ] }
@subcategories = Subcategory.all
@languages = Language.all
@amenities = Amenity.all
end
# GET /experiences/1/edit
def edit
@categories = Category.all.map{|c| [ c.name, c.id ] }
@languages = Language.all
@amenities = Amenity.all
@experience.subcategory_ids = params[:subcategory_ids]
@experience.language_ids = params[:language_ids]
@experience.amenity_ids = params[:amenity_ids]
redirect_to listing_experience_path(@experience)
end
# POST /experiences
# POST /experiences.json
def create
@experience = current_user.experiences.build(experience_params)
@experience.subcategory_ids = params[:subcategory_ids]
@experience.language_ids = params[:language_ids]
@experience.amenity_ids = params[:amenity_ids]
if @experience.save
redirect_to listing_experience_path(@experience), notice: "Saved..."
else
render :new, notice: "Something went wrong..."
end
end
# PATCH/PUT /experiences/1
# PATCH/PUT /experiences/1.json
def update
new_params = experience_params
new_params = experience_params.merge(active: true) if is_ready_experience
if @experience.update(new_params)
flash[:notice] = "Updated..."
else
flash[:notice] = "Something went wrong..."
end
redirect_back(fallback_location: request.referer)
end
# DELETE /experiences/1
# DELETE /experiences/1.json
def destroy
@experience.destroy
respond_to do |format|
format.html { redirect_to experiences_url, notice: 'Experience was successfully destroyed.' }
format.json { head :no_content }
end
def listing
end
def pricing
end
def description
end
def about
end
def photo_upload
@photos = @experience.photos
end
def amenities
@experience.amenity_ids = params[:amenity_ids]
end
def subcats
@experience.subcategory_ids = params[:subcategory_ids]
end
def languages
@experience.language_ids = params[:language_ids]
end
def timeslots
end
def location
end
def bookings
if current_user.admin_role?
redirect_to admin_url
elsif current_user.host_role?
@experiences = current_user.experiences.published
else
redirect_to root_path, alert: "You don't have permission. Apply to be a host!"
end
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_experience
@experience = Experience.find(params[:id])
@categories = Category.all.map{|c| [ c.name, c.id ] }
@photos = @experience.photos
end
def is_authorised
redirect_to root_path, alert: "You don't have permission" unless current_user.id == @experience.user_id
end
def set_subcategories
@subcategories = Subcategory.all
end
def set_languages
@languages = Language.all
end
def set_amenities
@amenities = Amenity.all
end
def is_ready_experience
!@experience.active && !@experience.name.blank? && !@experience.summary.blank? && !@experience.what_do.blank? && !@experience.host_bring.blank? && !@experience.location.blank? && !@experience.price.blank? && !@experience.length.blank? && !@experience.accomodate.blank? && !@experience.notracetip.blank? && !@experience.difficulty.blank? && !@experience.cat_help.blank? && !@experience.subcategories.blank? && !@experience.languages.blank? && !@experience.amenities.blank? && !@experience.photos.blank? && !@experience.user_bring.blank? && !@experience.what_learn.blank? && !@experience.about_guide.blank?
end
def has_inventory
@experience.timeslot.inventory > 0
end
# Never trust parameters from the scary internet, only allow the white list through.
def experience_params
params.require(:experience).permit(:name, :summary, :about_guide, :what_do, :host_bring, :user_bring, :what_learn,
:location, :price, :length, :difficulty, :cat_help, :accomodate, :notracetip, :subcategory_ids => [], :language_ids => [], :amenity_ids => [])
end
end
<div class="row">
<div class="col-md-10 col-md-offset-1">
<h1 class="text-center">Create Your Experience</h1>
<div class="container">
<%= form_for @experience do |f| %>
<!-- Experience Name // Text Field -->
<div class="row">
<div class="form-group">
<label>Experience Name</label>
<%= f.text_field :name, placeholder: "Name of your experience", class: "form-control", required: true %>
</div>
</div>
<!-- Experience Description // Text Area -->
<div class="row">
<div class="form-group">
<label>Experience Description</label>
<%= f.text_area :summary, rows: 5, placeholder: "Describe your experience", class: "form-control", required: true %>
</div>
</div>
<!-- Location // Text Field -->
<div class="row">
<div class="form-group">
<label>Location</label>
<%= f.text_field :location, placeholder: "Where is your experience?", class: "form-control", required: true %>
</div>
</div>
<!-- Length of Trip // Dropdown Select -->
<div class="row">
<div class="select">
<div class="form-group">
<label>Category Type</label> <br/>
<%= f.select :cat_help, [["Activity", 1], ["Food & Beverage", 2], ["Vista Point", 3]],
id: "cat_help", prompt: "Select...", class: "form-control", required: true %>
</div>
</div>
<!-- Length of Trip // Dropdown Select -->
<div class="row">
<div class="col-md-3 select">
<div class="form-group">
<label>Length Type</label> <br/>
<%= f.select :length, [["Daytrip", "Daytrip"], ["Overnight", "Overnight"], ["Weekend Getaway", "Weekend"], ["Multi-Day", "Multi-Day"]],
id: "length", prompt: "Select...", class: "form-control", required: true %>
</div>
</div>
<!-- Difficulty Rating // Dropdown Select -->
<div class="row">
<div class="col-md-3 col-md-offset-1 select">
<div class="form-group">
<label>Difficulty</label> <br/>
<%= f.select :difficulty, [["Light", "Light"], ["Moderate", "Moderate"], ["Advanced", "Advanced"], ["Extreme", "Extreme"]],
id: "difficulty", prompt: "Select...", class: "form-control", required: true %>
</div>
</div>
<!-- Group Size // Dropdown Select -->
<div class="col-md-3 col-md-offset-1 select">
<div class="form-group">
<label>Group Size</label> <br/>
<%= f.select :accomodate, [["1", 1], ["2-4", 2], ["5-8", 3], ["8+", 4]],
id: "accomodate", prompt: "Select...", class: "form-control", required: true %>
</div>
</div>
</div>
<!-- Final Submit // Button -->
<div>
<%= f.submit "Create Your Experience", class: "btn btn-normal btn-block" %>
</div>
<% end %>
</div>
</div>
</div>
体验\u controller.rb
Rails.application.routes.draw do
mount RailsAdmin::Engine => '/admin', as: 'rails_admin'
resource :experiences do
member do
get 'dashboard'
get 'index'
get 'bookings'
end
end
resources :experiences, except: [:edit] do
member do
get 'listing'
get 'pricing'
get 'description'
get 'photo_upload'
get 'amenities'
get 'location'
get 'about'
get 'subcats'
get 'languages'
get 'timeslots'
end
resources :photos, only: [:create, :destroy]
resources :timeslots, only: [:create, :destroy]
resources :reservations, only: [:create]
resources :calendars
end
resources :experiences do
resources :subcategories
end
resources :subcategories do
resources :experiences
end
resources :categories do
resources :experiences
resources :subcategories
end
devise_for :users, controllers: {
sessions: 'users/sessions',
passwords: 'users/passwords',
registrations: 'users/registrations'
}
namespace :admin do
get '', to: 'dashboard#index', as: '/'
end
resources :host_requests do
resources :users
end
resources :static_pages do
resources :users
end
resources :users, only: [:show]
get '/host_calendar' => "calendars#host"
get 'search' => 'static_pages#search'
root to: "static_pages#home"
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end
class ExperiencesController < ApplicationController
before_action :set_experience, only: [:show, :edit, :update, :destroy, :listing, :pricing, :description, :photo_upload, :amenities, :location, :subcats, :languages, :about, :timeslots]
before_action :set_subcategories, only: [:subcats]
before_action :set_languages, only: [:languages]
before_action :set_amenities, only: [:amenities]
before_action :is_authorised, except: [:show, :index, :new, :create, :dashboard, :bookings]
before_action :authenticate_user!
load_and_authorize_resource
# GET /experiences
# GET /experiences.json
def index
if current_user.admin_role?
redirect_to admin_url
elsif current_user.host_role?
@experiences = current_user.experiences
else
@experiences = Experience.published
end
end
def dashboard
if current_user.admin_role?
redirect_to admin_url
elsif current_user.host_role?
@experiences = current_user.experiences
else
redirect_to root_path, alert: "You don't have permission. Apply to be a host!"
end
end
# GET /experiences/1
# GET /experiences/1.json
def show
if current_user.user_role?
if !@experience.published?
redirect_to root_path, alert: "You don't have permission."
end
end
@base_latitude = @experience.latitude
@base_longitude = @experience.longitude
@base_timezone = Timezone.lookup(@base_latitude, @base_longitude)
@timezone_name = @base_timezone.name
end
# GET /experiences/new
def new
@experience = current_user.experiences.new
@categories = Category.all.map{|c| [ c.name, c.id ] }
@subcategories = Subcategory.all
@languages = Language.all
@amenities = Amenity.all
end
# GET /experiences/1/edit
def edit
@categories = Category.all.map{|c| [ c.name, c.id ] }
@languages = Language.all
@amenities = Amenity.all
@experience.subcategory_ids = params[:subcategory_ids]
@experience.language_ids = params[:language_ids]
@experience.amenity_ids = params[:amenity_ids]
redirect_to listing_experience_path(@experience)
end
# POST /experiences
# POST /experiences.json
def create
@experience = current_user.experiences.build(experience_params)
@experience.subcategory_ids = params[:subcategory_ids]
@experience.language_ids = params[:language_ids]
@experience.amenity_ids = params[:amenity_ids]
if @experience.save
redirect_to listing_experience_path(@experience), notice: "Saved..."
else
render :new, notice: "Something went wrong..."
end
end
# PATCH/PUT /experiences/1
# PATCH/PUT /experiences/1.json
def update
new_params = experience_params
new_params = experience_params.merge(active: true) if is_ready_experience
if @experience.update(new_params)
flash[:notice] = "Updated..."
else
flash[:notice] = "Something went wrong..."
end
redirect_back(fallback_location: request.referer)
end
# DELETE /experiences/1
# DELETE /experiences/1.json
def destroy
@experience.destroy
respond_to do |format|
format.html { redirect_to experiences_url, notice: 'Experience was successfully destroyed.' }
format.json { head :no_content }
end
def listing
end
def pricing
end
def description
end
def about
end
def photo_upload
@photos = @experience.photos
end
def amenities
@experience.amenity_ids = params[:amenity_ids]
end
def subcats
@experience.subcategory_ids = params[:subcategory_ids]
end
def languages
@experience.language_ids = params[:language_ids]
end
def timeslots
end
def location
end
def bookings
if current_user.admin_role?
redirect_to admin_url
elsif current_user.host_role?
@experiences = current_user.experiences.published
else
redirect_to root_path, alert: "You don't have permission. Apply to be a host!"
end
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_experience
@experience = Experience.find(params[:id])
@categories = Category.all.map{|c| [ c.name, c.id ] }
@photos = @experience.photos
end
def is_authorised
redirect_to root_path, alert: "You don't have permission" unless current_user.id == @experience.user_id
end
def set_subcategories
@subcategories = Subcategory.all
end
def set_languages
@languages = Language.all
end
def set_amenities
@amenities = Amenity.all
end
def is_ready_experience
!@experience.active && !@experience.name.blank? && !@experience.summary.blank? && !@experience.what_do.blank? && !@experience.host_bring.blank? && !@experience.location.blank? && !@experience.price.blank? && !@experience.length.blank? && !@experience.accomodate.blank? && !@experience.notracetip.blank? && !@experience.difficulty.blank? && !@experience.cat_help.blank? && !@experience.subcategories.blank? && !@experience.languages.blank? && !@experience.amenities.blank? && !@experience.photos.blank? && !@experience.user_bring.blank? && !@experience.what_learn.blank? && !@experience.about_guide.blank?
end
def has_inventory
@experience.timeslot.inventory > 0
end
# Never trust parameters from the scary internet, only allow the white list through.
def experience_params
params.require(:experience).permit(:name, :summary, :about_guide, :what_do, :host_bring, :user_bring, :what_learn,
:location, :price, :length, :difficulty, :cat_help, :accomodate, :notracetip, :subcategory_ids => [], :language_ids => [], :amenity_ids => [])
end
end
<div class="row">
<div class="col-md-10 col-md-offset-1">
<h1 class="text-center">Create Your Experience</h1>
<div class="container">
<%= form_for @experience do |f| %>
<!-- Experience Name // Text Field -->
<div class="row">
<div class="form-group">
<label>Experience Name</label>
<%= f.text_field :name, placeholder: "Name of your experience", class: "form-control", required: true %>
</div>
</div>
<!-- Experience Description // Text Area -->
<div class="row">
<div class="form-group">
<label>Experience Description</label>
<%= f.text_area :summary, rows: 5, placeholder: "Describe your experience", class: "form-control", required: true %>
</div>
</div>
<!-- Location // Text Field -->
<div class="row">
<div class="form-group">
<label>Location</label>
<%= f.text_field :location, placeholder: "Where is your experience?", class: "form-control", required: true %>
</div>
</div>
<!-- Length of Trip // Dropdown Select -->
<div class="row">
<div class="select">
<div class="form-group">
<label>Category Type</label> <br/>
<%= f.select :cat_help, [["Activity", 1], ["Food & Beverage", 2], ["Vista Point", 3]],
id: "cat_help", prompt: "Select...", class: "form-control", required: true %>
</div>
</div>
<!-- Length of Trip // Dropdown Select -->
<div class="row">
<div class="col-md-3 select">
<div class="form-group">
<label>Length Type</label> <br/>
<%= f.select :length, [["Daytrip", "Daytrip"], ["Overnight", "Overnight"], ["Weekend Getaway", "Weekend"], ["Multi-Day", "Multi-Day"]],
id: "length", prompt: "Select...", class: "form-control", required: true %>
</div>
</div>
<!-- Difficulty Rating // Dropdown Select -->
<div class="row">
<div class="col-md-3 col-md-offset-1 select">
<div class="form-group">
<label>Difficulty</label> <br/>
<%= f.select :difficulty, [["Light", "Light"], ["Moderate", "Moderate"], ["Advanced", "Advanced"], ["Extreme", "Extreme"]],
id: "difficulty", prompt: "Select...", class: "form-control", required: true %>
</div>
</div>
<!-- Group Size // Dropdown Select -->
<div class="col-md-3 col-md-offset-1 select">
<div class="form-group">
<label>Group Size</label> <br/>
<%= f.select :accomodate, [["1", 1], ["2-4", 2], ["5-8", 3], ["8+", 4]],
id: "accomodate", prompt: "Select...", class: "form-control", required: true %>
</div>
</div>
</div>
<!-- Final Submit // Button -->
<div>
<%= f.submit "Create Your Experience", class: "btn btn-normal btn-block" %>
</div>
<% end %>
</div>
</div>
</div>
尝试使您的\u form.html.erb如下所示:
<!-- Experience Name // Text Field -->
<div class="row">
<div class="form-group">
<label>Experience Name</label>
<%= f.text_field :name, placeholder: "Name of your experience", class: "form-control", required: true %>
</div>
</div>
<!-- Experience Description // Text Area -->
<div class="row">
<div class="form-group">
<label>Experience Description</label>
<%= f.text_area :summary, rows: 5, placeholder: "Describe your experience", class: "form-control", required: true %>
</div>
</div>
<!-- Location // Text Field -->
<div class="row">
<div class="form-group">
<label>Location</label>
<%= f.text_field :location, placeholder: "Where is your experience?", class: "form-control", required: true %>
</div>
</div>
<!-- Length of Trip // Dropdown Select -->
<div class="row">
<div class="select">
<div class="form-group">
<label>Category Type</label> <br/>
<%= f.select :cat_help, [["Activity", 1], ["Food & Beverage", 2], ["Vista Point", 3]],
id: "cat_help", prompt: "Select...", class: "form-control", required: true %>
</div>
</div>
<!-- Length of Trip // Dropdown Select -->
<div class="row">
<div class="col-md-3 select">
<div class="form-group">
<label>Length Type</label> <br/>
<%= f.select :length, [["Daytrip", "Daytrip"], ["Overnight", "Overnight"], ["Weekend Getaway", "Weekend"], ["Multi-Day", "Multi-Day"]],
id: "length", prompt: "Select...", class: "form-control", required: true %>
</div>
</div>
<!-- Difficulty Rating // Dropdown Select -->
<div class="row">
<div class="col-md-3 col-md-offset-1 select">
<div class="form-group">
<label>Difficulty</label> <br/>
<%= f.select :difficulty, [["Light", "Light"], ["Moderate", "Moderate"], ["Advanced", "Advanced"], ["Extreme", "Extreme"]],
id: "difficulty", prompt: "Select...", class: "form-control", required: true %>
</div>
</div>
<!-- Group Size // Dropdown Select -->
<div class="col-md-3 col-md-offset-1 select">
<div class="form-group">
<label>Group Size</label> <br/>
<%= f.select :accomodate, [["1", 1], ["2-4", 2], ["5-8", 3], ["8+", 4]],
id: "accomodate", prompt: "Select...", class: "form-control", required: true %>
</div>
</div>
</div>
<!-- Final Submit // Button -->
<div>
<%= f.submit "Create Your Experience", class: "btn btn-normal btn-block" %>
</div>