コレグレーデギネード

WindowsとかUbuntuとかRubyとかRailsとか

オリジナルmethodを用意して実行するとRouting Error。

scaffoldで出来上がるのは、
index、show、new、edit、create、update、destroy。
上記以外のmethodを用意して実行したい。

ManagementsテーブルのStartTimesカラムに現在時刻を突っ込みたい。
update_attributeで特定のカラムの値を更新するmethodを新しく用意した。
controllers/managements_controller.rb (サンプル)

  # GET /managements
  # GET /managements.json
  def index
    @managements = Management.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @managements }
    end
  end

  def attr_update_time # 追加メソッド
    now = Time.now
    @management = Management.find(params[:id])
    @management.update_attribute(:start_time,now)
    redirect_to ({action: "index"}), notice: "Start Time was successfully updated"
  end

views/managements/index.html.erb(サンプル)

<% @managements.each do |management| %>
  <%= management.start_time.strftime("%H:%M") %>
  <%= link_to 'START',:action => :attr_update_time, :id => management %>
<% end %>


悲しい結果となる。

Routing Error

No route matches [POST] "/assets"

Try running rake routes for more information on available routes.

エラーログ

Started POST "/assets?action=attr_update_time&controller=managements&id=1" for 127.0.0.1 at 2012-05-17 21:59:44 +0900

ActionController::RoutingError (No route matches [POST] "/assets"):
  config/initializers/quiet_assets.rb:6:in `call_with_quiet_assets'


  Rendered /home/username/.rvm/gems/ruby-1.9.3-head@rails3/gems/actionpack-3.2.3/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (10.1ms)

config/routes.rbをざっと見直したところ…最終行のendの上、

〜省略〜
  # This is a legacy wild controller route that's not recommended for RESTful applications.
  # Note: This route will make all actions in every controller accessible via GET requests.
  # match ':controller(/:action(/:id))(.:format)'
end

コメントアウトをはずしてサーバー再起動後、動作OK。

〜省略〜
  # This is a legacy wild controller route that's not recommended for RESTful applications.
  # Note: This route will make all actions in every controller accessible via GET requests.
  match ':controller(/:action(/:id))(.:format)'
end

基本だったか。こんなのはAjaxで始末してやりたいところだ。

追記:これって非RESTfulなインターフェースじゃねーか。
   ルーティングちゃ〜んと勉強しよね。