【发布时间】:2017-11-03 02:17:45
【问题描述】:
我不知道这个问题。使用宝石设计和全球化。 不知道是不是原因,但是form_for在html中生成了错误的动作,看看:
form class="edit_status" id="edit_status_1" action="/1/statuses/update" method="post" accept-charset="UTF-8"
Id 置于状态之前。我不知道为什么。
Form_for
form_for(@status, url:statuses_update_path(@status), method: :post) do |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
有什么东西不见了?
【问题讨论】:
标签: ruby-on-rails testing devise routing ruby-on-rails-5