przepraszam za zamieszanie #insurance-groups …i #companies…
Bo mam kilka takich.
Aby możliwe było żonglowanie w definicji ajax: {…}
type GET/POST koniecznie musiałem ustawić: ServerSide znowu na true, gdyż w przeciwnym wypadku w WEBricku widzidziałem cały czas GET/ …
Dla wywołania jak zaproponowałeś pojawia się:
Started POST “/companies.json” for 127.0.0.1 at 2015-01-22 19:07:24 +0100
Processing by CompaniesController#create as JSON
Parameters: {“draw”=>“1”, “columns”=>{“0”=>{“data”=>“0”, “name”=>"", “searchable”=>“false”, “orderable”=>“false”, “search”=>{“value”=>"", “regex”=>“false”}}, “1”=>{“data”=>“1”, “name”=>"", “searchable”=>“true”, “orderable”=>“true”, “search”=>{“value”=>"", “regex”=>“false”}}, “2”=>{“data”=>“2”, “name”=>"", “searchable”=>“true”, “orderable”=>“true”, “search”=>{“value”=>"", “regex”=>“false”}}, “3”=>{“data”=>“3”, “name”=>"", “searchable”=>“true”, “orderable”=>“true”, “search”=>{“value”=>"", “regex”=>“false”}}, “4”=>{“data”=>“4”, “name”=>"", “searchable”=>“true”, “orderable”=>“true”, “search”=>{“value”=>"", “regex”=>“false”}}, “5”=>{“data”=>“5”, “name”=>"", “searchable”=>“true”, “orderable”=>“true”, “search”=>{“value”=>"", “regex”=>“false”}}, “6”=>{“data”=>“6”, “name”=>"", “searchable”=>“true”, “orderable”=>“true”, “search”=>{“value”=>"", “regex”=>“false”}}, “7”=>{“data”=>“7”, “name”=>"", “searchable”=>“true”, “orderable”=>“true”, “search”=>{“value”=>"", “regex”=>“false”}}, “8”=>{“data”=>“8”, “name”=>"", “searchable”=>“true”, “orderable”=>“true”, “search”=>{“value”=>"", “regex”=>“false”}}, “9”=>{“data”=>“9”, “name”=>"", “searchable”=>“true”, “orderable”=>“true”, “search”=>{“value”=>"", “regex”=>“false”}}}, “order”=>{“0”=>{“column”=>“0”, “dir”=>“asc”}}, “start”=>“0”, “length”=>“10”, “search”=>{“value”=>"", “regex”=>“false”}}
User Load (0.7ms) SELECT “users”.* FROM “users” WHERE “users”.“id” = $1 ORDER BY “users”.“id” ASC LIMIT 1 [[“id”, 4]]
Completed 400 Bad Request in 15ms
ActionController::ParameterMissing - param is missing or the value is empty: company:
actionpack (4.2.0) lib/action_controller/metal/strong_parameters.rb:249:in require' () home/bodzio/www/pop/app/controllers/companies_controller.rb:98:in
company_params’
() home/bodzio/www/pop/app/controllers/companies_controller.rb:47:in create' actionpack (4.2.0) lib/action_controller/metal/implicit_render.rb:4:in
send_action’
actionpack (4.2.0) lib/abstract_controller/base.rb:198:in process_action' actionpack (4.2.0) lib/action_controller/metal/rendering.rb:10:in
process_action’
actionpack (4.2.0) lib/abstract_controller/callbacks.rb:20:in block in process_action' activesupport (4.2.0) lib/active_support/callbacks.rb:117:in
call’
activesupport (4.2.0) lib/active_support/callbacks.rb:117:in call' activesupport (4.2.0) lib/active_support/callbacks.rb:169:in
block in halting’
activesupport (4.2.0) lib/active_support/callbacks.rb:151:in call' activesupport (4.2.0) lib/active_support/callbacks.rb:151:in
block in halting_and_conditional’
activesupport (4.2.0) lib/active_support/callbacks.rb:234:in call' activesupport (4.2.0) lib/active_support/callbacks.rb:234:in
block in halting’
rozumiem, że jest to związane z:
class CompaniesController < ApplicationController
before_action :authenticate_user!
def index
respond_to do |format|
format.html
format.json{ render json: CompaniesDatatable.new(view_context, { only_for_current_user_id: @current_user.id }) }
end
end
…
end
jest jeszcze setting:
"sServerMethod": "POST"
So close! Wystarczy teraz żeby Twój index odpowiadał na POST a nie GET,
resources :companies, except: [:index, :create] do
post 'index', on: :collection
end
coś takiego w routes.rb
A to jest wewnątrz definicji ajax: { …}, czy poza nią?
routes
czy resources
?
resources oczywiście ;p
A, tylko zmień na insurance, w AJAX’ie też, bo widzę, że edytowałeś posta wcześniej
jest jeszcze setting:
“sServerMethod”: “POST”
A to jest wewnątrz definicji ajax: { …}, czy poza nią?
Duuude, już masz POST, popatrz w logi, wystarczy tylko żeby wywoływało odpowiednią akcję w odpowiednim kontrolerze. Musisz wywalić POST /costam
matchujący do akcij create
i dodać POST /costam
matchujący do index
no /cośtam tak średnio działa
Coś chyba w tym route.rb namieszaliśmy
Po kolei - do jakiego kontrolera ma się odnosić Twoja tabela? CompaniesController
czy coś z insurance?
Zostanmy przy Company
resources :companies, except: [:index, :create] do
post 'index', on: :collection
end
companies_url POST /companies/index(.:format) companies#index
new_company_url GET /companies/new(.:format) companies#new
edit_company_url GET /companies/:id/edit(.:format) companies#edit
company_url GET /companies/:id(.:format) companies#show
PATCH /companies/:id(.:format) companies#update
PUT /companies/:id(.:format) companies#update
DELETE /companies/:id(.:format) companies#destroy
I teraz wywołanie:
http://127.0.0.1:3000/companies/ nic nie daje. zgłasza błąd
A, przepraszam:
resources :companies, except: [:index, :create] do
post :index, on: :collection
end
rake routes | grep compa
companies POST /companies(.:format) companies#index
companies POST /companies/index(.:format) companies#index
new_company GET /companies/new(.:format) companies#new
edit_company GET /companies/:id/edit(.:format) companies#edit
company GET /companies/:id(.:format) companies#show
PATCH /companies/:id(.:format) companies#update
PUT /companies/:id(.:format) companies#update
DELETE /companies/:id(.:format) companies#destroy
Zamień 'index' na :index
, najwidoczniej symbole są inaczej traktowane jak pasują do standardowych railsowych akcji
po zmianie:
companies POST /companies(.:format) companies#index
new_company GET /companies/new(.:format) companies#new
edit_company GET /companies/:id/edit(.:format) companies#edit
company GET /companies/:id(.:format) companies#show
PATCH /companies/:id(.:format) companies#update
PUT /companies/:id(.:format) companies#update
DELETE /companies/:id(.:format) companies#destroy
i
a dla http://127.0.0.1:3000/companies
WEBric:
ActionController::RoutingError (No route matches [GET] “/companies”):
actionpack (4.2.0) lib/action_dispatch/middleware/debug_exceptions.rb:21:in call' actionpack (4.2.0) lib/action_dispatch/middleware/show_exceptions.rb:30:in
call’
railties (4.2.0) lib/rails/rack/logger.rb:38:in call_app' railties (4.2.0) lib/rails/rack/logger.rb:20:in
block in call’
activesupport (4.2.0) lib/active_support/tagged_logging.rb:68:in block in tagged' activesupport (4.2.0) lib/active_support/tagged_logging.rb:26:in
tagged’
activesupport (4.2.0) lib/active_support/tagged_logging.rb:68:in tagged' railties (4.2.0) lib/rails/rack/logger.rb:20:in
call’
.i pojawia się znany ekran:
Routing Error
No route matches [GET] “/companies”
Zacznijmy może od tego, że wybierając link w menu wybieram:
companies_path … a to jest chyba domyślnie metoda GET
Pewnie polegaleś wcześniej na GET /companies
żeby wejść na stronę. Tak na szybko:
resources :companies do
post 'datatables_index', on: :collection
end
data-source="<%= datatables_index_companies_path(format: :json) %>"
Kontroler
def datatables_index
respond_to do |format|
format.json{ render json: CompaniesDatatable.new(view_context, { only_for_current_user_id: @current_user.id }) }
end
end
Ależ przeszkód
… i na koniec i tak nie zadziała
…daj chwilkę na wprowadzenie zmiany
datatables_index_companies POST /companies/datatables_index(.:format) companies#datatables_index
companies GET /companies(.:format) companies#index
POST /companies(.:format) companies#create
new_company GET /companies/new(.:format) companies#new
edit_company GET /companies/:id/edit(.:format) companies#edit
company GET /companies/:id(.:format) companies#show
PATCH /companies/:id(.:format) companies#update
PUT /companies/:id(.:format) companies#update
DELETE /companies/:id(.:format) companies#destroy