私はこの問題を知らない。 gemを使用してdeviseとglobalize。 原因はわかりませんが、form_forはHTMLで間違ったアクションを生成します:パッチルーティングエラーテスト中のRails 5
フォームclass = "edit_status" id = "edit_status_1" action = "/ 1/statuses/update" method = "post "accept-charset =" UTF-8 "
ステータスの前にIDを配置します。どうしてか分かりません。 (:statuses_update_path(@status)、メソッド::@status、URLポスト)のform_for
のform_for
| fのか|
コントローラがid = updateを受信していたために、設定されたメソッドのポストがありません。
以下に問題点を示します。
エラー
No route matches {:action=>"/statuses/390022407", :controller=>"statuses", :status
=>{:content=>"Lorem ipsum"}}
Routes.db
Rails.application.routes.draw do
scope "(:locale)", locale: /en|pl/ do
post 'statuses/update'
resources :statuses, only: [:update]
end
end
レールルート
コントローラ
class StatusesController < ApplicationController
before_action :authenticate_user!
before_action :set_locale
def update
#code...
end
private
def status_params
params.require(:status).permit(:content)
end
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
end
テストコード
require 'test_helper'
class StatusesControllerTest < ActionController::TestCase
include Devise::Test::ControllerHelpers
def setup
@user = users(:brock)
@status = statuses(:statusBrock)
I18n.default_locale = :en
end
test "should not update when not logged in" do
patch status_path(@status), params: { status: { content: "Lorem ipsum" } }
assert_redirected_to new_user_session_path
end
test "should update when logged in user admin" do
sign_in @user
patch status_path(@status), params: { status: { content: "Lorem ipsum" } }
assert_equal "Lorem ipsum", @status.content
end
end
何かが欠けていますか?
私はRESTfulについて最もよく研究し、コードを修正し、最初のルートを削除し、Railsの命名規則を使用します。ポストajaxを使用していたので、間違ったルートを追加してください。なぜなら、ajaxを動作させないからです。しかし、問題は同じAjax請求書にあった。手伝ってくれてありがとう。 –