是否可以将非REST部分表单中的REST和非REST操作和资源组合在一起?

时间:2012-03-22 21:49:15

标签: ruby-on-rails rest routing action scaffold

我需要从我创建的脚手架生成的表中获取单独的索引/视图。在这个视图中,我有大约一半的原始脚手架列,用户可以编辑和更新其中两个。我创建了一个非脚手架控制器来生成这个视图。所以,我的问题:

1)。是否有可能将支架和非支架资源组合成非支架部分形式?

2)。我可以使用编辑操作和部分来自非脚手架控制器并更新到脚手架表吗? 我想在生产中,这可能是某种授权系统?但是现在,我只是想找出可能性。我在非脚手架控制器中的视图/索引有效,但编辑按钮当然没有任何作用。我错过了什么吗?现在,我在Windows 7上使用Rails 3.0,如果这有任何区别。

部分路由:

<%= form_tag(:controller=> "ravs", :method=> "get", :action=> "edit", :class=>    "_dec") %>

    <div >
    <%= submit_tag(:controller=> "achvrs", :method=> "put", :action=> "update") %>
    </div>
    <% end %>

这是我的routes.rb:

    Effcnt::Application.routes.draw do
    get "ravs/index"
    get "ravs/edit"
    get "ravs/_dec"
    resources :achvrs

这是我的非脚手架控制器中的编辑操作:

    def edit
    @achvr = Achvr.find(params[:id])
    end

2 个答案:

答案 0 :(得分:0)

我认为您的代码无效。因为根据rails API(从rails2.3.x到3.2),&#34; submit_tag&#34;没有您提供的选项(

<%= submit_tag(:controller=> "achvrs", :method=> "put", :action=> "update") %>

),此标记支持的内容是:

:confirm => 'question?' - This will add a JavaScript confirm prompt with the question specified. If the user accepts, the form is processed normally, otherwise no action is taken.
:disabled - If true, the user will not be able to use this input.
:disable_with - Value of this parameter will be used as the value for a disabled version of the submit button when the form is submitted.
Any other key creates standard HTML options for the tag.

而且,我不认为您的工具代码有意义,表单只能提交给1个目标(some_controller#some_action),但是您似乎想要一次向2个动作提交表单?

所以,我认为你最好在Rails中编写你的代码&#39; MVC的方式:将您想要运行的代码组合成1个动作,例如:

def the_action_your_form_submitted_to 
    # previously it was called in your RESTful action 
    do_task_no.1   
    # previously it was called in your non-RESTful action
    do_task_no.2   
end

答案 1 :(得分:0)

如果我理解你的话,你希望能够在1个视图中编辑记录的2列。

这样的功能是什么?:

  1. 您访问ravs#index
  2. ravs#index列出了所有Achvr记录
  3. 您可以点击其中一条记录上的修改
  4. 您将收到ravs#edit与记录相匹配的:id
  5. 在此视图中,您可以更新:col1:col2
  6. 的值
  7. 您点击了提交按钮,该按钮会将您转到achvrs#update
  8. 在您ravs#edit的视图中,您可以拥有此功能。像这样使用form_for应该有效,因为@achvrAchvr模型的一个实例。然后它会指向自己的控制器。

        <%= form_for(@achvr, :html => {:class => '_dec'}) do |f| %>
          <%= f.text_field :col1 %>
          <%= f.text_field :col2 %>
          <%= f.submit %>
        <% end %>
    

    achvrs#update操作中,您可以检查params哈希的值。但是,脚手架更新方法应该正确更新。当您从ravs#edit更新时,params只会保留:col1:col2

    的值

    最后一句话!这不是一种正确的方法。您可能希望拥有具有权限的用户模型。然后根据这些值过滤哪些值。