0

我有一个名为样本的模型。为简化起见,“sample”将有“name”、“price”和“approved”字段。

我想要一个页面来列出所有“已批准 = 'false'”的样本。在此页面中,我希望能够编辑示例字段,完成后选中已批准的复选框,然后按表单按钮批准所有选定的示例字段。

我看了 railscast #198 但它有一个我想避免的前一页......他有一个列出所有样本的网页,然后检查他想要编辑的那些,然后他终于可以访问“编辑个人”页面。我想跳过这个页面,直接进入批准页面。

在我的示例控制器上,我有:

def edit_individual
   @samplestoapprove = Sample.where(:approve => 'false')
end

在我的 routes.rb 我有:

resources :samples, :collection => { :edit_individual => :post, :update_individual => :put }

如果我们现在忽略控制器上的“update_individual”代码,然后我在示例中创建了一个视图,只是为了检查我是否可以列出未批准的示例。我称之为“edit_individual.html.erb”

<% title "Edit Samples" %>
<%= form_tag update_individual_samples_path :method => :put do  %>
<%= for sample in @samplestoapprove %>
    <%= fields_for "samplestoapprove[]", sample do |f| %>
        <h2><%= f sample.id %></h2>
    <%= end %>
<%= end %>
<p><%= submit_tag "Approve" %></p>
<%= end %>

然后我尝试访问“localhost:3000/samples/edit_individual”,但出现错误“找不到带有 id=edit_individual 的示例”

谁能帮我?我想在菜单上有一个名为“Approve”的选项,并带有指向此“edit_individual”的链接,当我单击它时,它会显示所有要使用前面提到的表格批准的样本......这很容易实现吗?我走在正确的道路上?

还是我应该选择数据网格之类的东西?例如http://www.tutorialized.com/tutorial/Editable-Datagrid-for-Ruby-on-Rails-Built-with-dhtmlxGrid/60309

这是我的 routes.rb 上与此问题相关的代码:

resources :samples, :collection => { :get => :edit_individual,
  :update_individual => :put}
4

1 回答 1

1

在你的路线中,你有:edit_individual => :post,但是当你像你一样在浏览器中访问一个 URL 时http://localhost:3000/samples/edit_individual,那就是在做一个 GET 请求。

我猜如果您查看 Rails 服务器运行的日志,您会看到您在访问该 URL 时的请求将转到您的 SampleController#show 操作并尝试edit_individual用作一个应该是的 Sample 的 ID显示。

我建议将您的路线更改为此,如Rails 路由指南第 2.10.2 节所示:

resources :samples do
  collection do
    get 'edit_individual'
  end
end
于 2013-09-24T00:32:24.687 回答