#ruby-on-rails #ruby #routing
#ruby-на-рельсах #рубиновый #маршрутизация #ruby-on-rails #ruby
Вопрос:
Я пытался разобраться в этом, но я впадаю в отчаяние, потому что не понимаю, почему это не работает. Что бы я ни пробовал, ни один маршрут не соответствует моей ссылке, и я получаю следующую ошибку:
Ошибка маршрутизации: неинициализированная константа LineItemsController
Моя ссылка выглядит следующим образом:
<%= button_to 'Add to template', line_items_path(template_id: @template, position_id: position) %>
Таким образом, создаваемая ссылка является:
http://localhost:3000/line_items?position_id=2amp;template_id=1
маршруты.рб:
Rails.application.routes.draw do
resources :line_items
resources :templates
resources :positions
line_item_controller.rb
class LineItemsController < ApplicationController
before_action :set_line_item, only: [:show, :edit, :update, :destroy]
# GET /line_items
# GET /line_items.json
def index
@line_items = LineItem.all
end
# GET /line_items/1
# GET /line_items/1.json
def show
end
# GET /line_items/new
def new
@line_item = LineItem.new
end
# GET /line_items/1/edit
def edit
end
# POST /line_items
# POST /line_items.json
def create
position = Position.find(params[:position_id])
template = Template.find(params[:template_id])
@line_item = LineItem.new(position, template)
respond_to do |format|
if @line_item.save
format.html { redirect_to template_url}
format.js {@current_item = @line_item}
format.json { render action: 'show',
status: :created, location: @line_item }
else
format.html { render action: 'new' }
format.json { render json: @line_item.errors,
status: :unprocessable_entity }
end
end
end
# PATCH/PUT /line_items/1
# PATCH/PUT /line_items/1.json
def update
respond_to do |format|
if @line_item.update(line_item_params)
format.html { redirect_to @line_item, notice: 'Line item was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @line_item.errors, status: :unprocessable_entity }
end
end
end
# DELETE /line_items/1
# DELETE /line_items/1.json
def destroy
@line_item.destroy
respond_to do |format|
format.html { redirect_to line_items_url }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_line_item
@line_item = LineItem.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
# def line_item_params
# params.require(:line_item).permit(:position_id, :template_id)
# end
#...
end
Насколько я понимаю, моя ссылка должна отправлять POST-запрос, который должен вызывать create
действие line_item controller
, тем самым сопоставляя маршрут POST /line_items(.:format) line_items#create
Спасибо за помощь, ребята!
Ответ №1:
Я думаю, что проблема заключается в имени файла вашего контроллера:
line_item_controller.rb
должно быть line_items_controller.rb
Комментарии:
1. О, боже, это действительно работает. Я уже несколько часов пытаюсь и не могу понять это? Я думаю, это происходит, когда вы все еще привыкаете ко всему «соглашению о конфигурации». Огромное спасибо за простое решение :).
2. С удовольствием, сэр 🙂