0

我陷入了一个简单的问题。我有一个表单标签和选择标签。在更改时,我希望用户导航到所选类别。

此表单在标题上可用,我在类别控制器中定义了 change_category 操作。

这是它的外观:-

应用程序.html.haml

=render :partial => "categories/category"

类别控制器.rb

def change_category
  @categories = Category.all
  @category_name = params[:main]
  @category = Category.find(params[:main])
end

_category.html.haml

=form_tag(change_category_category_path(@category),:method => "get", :remote => true) do
    =select_tag(:main, options_for_select(Category.all.collect {|p| [p.name,p.id]}), :prompt => "Select Category", :onchange => 'this.form.submit();')

路由.rb

resources :categories do
    member do
      get :change_category
    end
  end

错误 :-

No route matches {:action=>"change_category", :controller=>"categories", :id=>nil}

我认为问题是@category 评估为零,我该如何解决这个问题?

4

2 回答 2

1

你的问题是当你局部渲染的时候@category可能没有设置布局。此外,您无法真正知道将其设置为什么,因为您希望用户更改为的类别是下拉列表中选择的类别。

我会change_category改为进行收集操作(我还重命名了该操作以使其读起来更好一点):

resources :categories do
  collection do
    get :change
  end
end

然后您的表格应更改为

= form_tag(change_categories_path(),:method => "get", :remote => true) do
  = select_tag(:main, ...)
于 2012-07-25T11:59:47.503 回答
0

首先,您需要检查您的路由规则。转到应用程序根目录并键入“rake routes”然后您可以找到您的路由规则。

 metrics     GET        /metrics(.:format)             metrics#index
             POST       /metrics(.:format)             metrics#create
 new_metric  GET        /metrics/new(.:format)         metrics#new
 edit_metric GET        /metrics/:id/edit(.:format)    metrics#edit
 metric      GET        /metrics/:id(.:format)         metrics#show
             PUT        /metrics/:id(.:format)         metrics#update
             DELETE     /metrics/:id(.:format)         metrics#destroy
  1. 当您使用“资源”生成路由规则时,它总是包含“:id”,但您似乎没有提供它。

解决方案 1. 制定您的自定义路由规则。你可以在这里找到一种方法http://guides.rubyonrails.org/routing.html

解决方案 2. 在表单中添加“id”输入标签以将 :id 发送到您的控制器。然后改变“params[:main]”=>“params[:id]”

于 2012-07-25T08:39:37.933 回答