这是我的路线:
root :to => 'sites#index'
match 'sites' => 'sites#index'
match 'sites/:site' => 'sites#show'
match 'sites/:site/publish' => 'sites#publish', :via => :get
match 'sites/:site/publish' => 'sites#push', :via => :put
match 'sites/:site/:entity_type' => 'entity#index'
match 'sites/:site/:entity_type/new' => 'entity#new', :via => :get
match 'sites/:site/:entity_type/new' => 'entity#create', :via => :put
match 'sites/:site/:entity_type/:entity_name' => 'entity#edit', :via => :get
match 'sites/:site/:entity_type/:entity_name' => 'entity#update', :via => :put
我遇到的问题是,当我为发布路由执行 POST 时,它实际上根本没有调用 action 方法。它指出“entity_type_ 参数(不应指定)设置为“发布”。
这是我的表格:
<%= form_tag({:controller => 'sites', :action => 'publish'}) do %>
<%= hidden_field_tag 'site', params[:site] %>
<%= submit_tag 'Publish' %>
<% end %>
实际上,我不需要指定隐藏字段,因为这是路由的结果。当我点击“发布”时,会发生以下情况:
Started POST "/sites/kieransenior/publish" for 127.0.0.1 at 2012-05-14 20:35:48 +0100
Processing by EntityController#index as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"bCooYei5XTbfNv4MwXqrYAvBzazdcCZpHr7HufKPcxo=", "site"=>"kieransenior", "commit"=>"Publish", "entity_type"=>"publish"}
Completed 500 Internal Server Error in 1ms
HTML 表单如下所示(为清楚起见):
<form accept-charset="UTF-8" action="/sites/kieransenior/publish" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="authenticity_token" type="hidden" value="bCooYei5XTbfNv4MwXqrYAvBzazdcCZpHr7HufKPcxo=" /></div>
<input id="site" name="site" type="hidden" value="kieransenior" />
<input name="commit" type="submit" value="Publish" />
</form>
我做错了什么导致它发布到错误的地方?一定是我的路由在做,因为表格是正确的。
编辑
推送的控制器动作:
def push
respond_to do |format|
redirect_to :controller => 'sites', :action => 'show', :site => params[:site]
end
end
报废上面的,如果我的大脑被搞砸了,会有所帮助。看起来我在某个时候在那里倾倒了一个redirect_to,并没有删除respond_to。哎呀。