创建一个批准表单,列出所有未批准的样本,并允许编辑/批准它们

时间:2013-09-23 23:46:40

标签: datagrid ruby-on-rails-3.2 railscasts

还是非常棒的铁轨让我裸露了一段时间......

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

我想要一个页面,列出所有“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”的链接,当我点击它时,它会显示所有样品都要通过前面提到的形式批准...这很容易实现吗?我走的是正确的道路?

或者我应该选择像datagrid这样的东西?例如http://www.tutorialized.com/tutorial/Editable-Datagrid-for-Ruby-on-Rails-Built-with-dhtmlxGrid/60309

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

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

1 个答案:

答案 0 :(得分:1)

在您的路线中,您有:edit_individual => :post,但是当您在浏览器中访问网址时就像使用http://localhost:3000/samples/edit_individual一样,那就是在执行GET请求。

我猜你是否查看运行Rails服务器的日志,当你访问该URL时,你会看到你的请求是你的SampleController#show action并尝试使用edit_individual as应显示的一个样本的ID。

我建议您将路线更改为此Rails routing guide section 2.10.2

resources :samples do
  collection do
    get 'edit_individual'
  end
end