Можно ли объединить действия и ресурсы REST и Non REST из частичной формы без REST? - PullRequest
1 голос
/ 23 марта 2012

Мне нужен отдельный индекс / представление из созданной скаффолдом таблицы, которую я создал. В этом представлении у меня есть около половины исходных столбцов скаффолда с намерением пользователя иметь возможность редактировать и обновлять два из них. Я создал контроллер без скаффолда для генерации этого представления. Итак, мои вопросы:

1). Можно ли объединить ресурсы лесов и не лесов в частичной форме без лесов?

2). Могу ли я использовать действие правки и частичное из контроллера, не являющегося платформой, с обновлением, идущим в таблицу лесов? Я предполагаю, что в производстве это, скорее всего, какая-то система авторизации? Но сейчас я просто хочу выяснить возможности. Мой просмотр / индекс в контроллере без скаффолда работает, но, конечно, кнопка редактирования ничего не делает. Я что-то пропустил? На данный момент я использую Rails 3.0 в Windows 7, если это имеет какое-либо значение.

Маршрутизация частично:

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

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

Это мои маршруты. 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 голосов
/ 23 марта 2012

Если я вас правильно понял, вы хотите, скажем, иметь возможность редактировать 2 столбца записи в 1 представлении.

Функциональность такая:?

  1. Вы посещаете ravs#index
  2. ravs#index перечисляет все записи Achvr
  3. Вы нажимаете редактировать одну из этих записей
  4. Вы отправляетесь на ravs#edit с :id соответствует записи
  5. В этом представлении вы можете обновить значения :col1 и :col2
  6. Вы нажимаете кнопку отправки, которая отправляет вам achvrs#update

В вашем представлении для ravs#edit вы можете иметь это.Использование form_for, как это, должно работать, так как @achvr является экземпляром модели Achvr.Затем он указывает на свой собственный контроллер.

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

В вашем действии achvrs#update вы можете проверить хэш params для его значений.Однако метод обновления scaffolded должен корректно обновлять вещи.При обновлении с ravs#edit, params будет содержать только значения для :col1 и :col2

Последнее слово!Это не правильный способ сделать это.Возможно, вы захотите иметь модель пользователя с разрешениями.Затем отфильтруйте, какие значения можно редактировать, основываясь на них.

0 голосов
/ 23 марта 2012

Я не думаю, что ваш код работает. поскольку в соответствии с API-интерфейсом rails (от rails2.3.x до 3.2) «submit_tag» не имеет предоставленных вами параметров (

<%= 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 так: MVC: объедините код, который вы хотите запустить, в 1 действие, например ::10000

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
...