I have no idea of the problem. Using gems devise and globalize. I don't know if is the cause, but form_for generate wrong action in html, look:
form class="edit_status" id="edit_status_1" action="/1/statuses/update" method="post" accept-charset="UTF-8"
Id's placing before statuses. I don't know why.
Form_for
form_for(@status, url:statuses_update_path(@status), method: :post) do |f|
Setted method post because the controller was receiving id = update without it.
The problem detail below.
Error
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
Rails routes
Controller
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
Test code
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
Something's missing?
Aucun commentaire:
Enregistrer un commentaire