redirect_to вызывает ошибку отсутствия шаблона

Я делаю переход с Rails 2 на Rails 3.

Представление _role_item.html.erb:

    <% if @employee.has_role?(role.id) %>
        <%= link_to image_tag('pman/checkbox_unchecked.jpg'), action: 'add_role', :employee_id => @employee.id, :role_id => role.id %>
    <% end %>

Установка флажка должна назначить роль этому сотруднику и перенаправить обратно на неполную страницу, содержащую список_ролей и список_привилегий.

В моем контроллере у меня есть:

def add_role
        @employee = Employee::OldEmployee.find(params[:employee_id])
        @employee.add_role(params[:role_id])
        redirect_to :action => 'employee_privileges', :employee_id => @employee.id  
    end

Представление, которое имеет обе части, _employee_privacy.html.erb:

<h3> <%= @employee.full_name %> (<%= @employee.initials %>) <%= @assign_roles %>  - PRIVILEGES & ACCESS</h3>

<br>

<table><tr><td valign=top>

    <%= render :partial => 'role_list' %>

</td><td width=50>
</td><td valign=top>

    <%= render :partial => 'privilege_list' %>

</td></tr></table>

<br>

работник_привилегии.js.erb:

$("#roles").html("<%= j(render partial: 'employee_privileges') %>");

Функция внутри контроллера:

деф

employee_privileges
    @employee = Employee::OldEmployee.find(params[:employee_id])

    @roles = Acl::Role.find :all

    @modules = Acl::Module.find :all
    @module_privileges = Array.new
    @general_privileges = Acl::Privilege.find :all, :conditions => 'module_id IS NULL'
    if !@general_privileges.empty?
        @module_privileges << [nil, nil, nil, @general_privileges]
    end
    @modules.each do |m|
        if !m.privileges.empty?
            @module_privileges << [m.id, m.name, m.description, m.privileges]
        end
    end

    @assign_roles = flash[:assign_roles]
    #render :partial => 'employee_privileges'   
end

В настоящее время при нажатии на флажок я получаю сообщение об ошибке:

Missing template acl/acl/employee_privileges, application/employee_privileges with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}. Searched in: * "/home/alex/Intranet_update/app/views"

Любая помощь будет оценена по достоинству.


person ROR senior dev    schedule 24.10.2013    source источник


Ответы (1)


Укажите относительный путь для партиала, который вы хотите отобразить.

$("#roles").html("<%= j(render partial: 'employee_privileges') %>");

вариант, такой как частичный рендеринг: '/folder_path/employe_privacys'

person Sabyasachi Ghosh    schedule 24.10.2013
comment
@MalusAlexandru указали ли вы относительный путь к файлу, к которому хотите получить доступ? - person Sabyasachi Ghosh; 24.10.2013
comment
сделайте это _employee_privacy.html.erb, а не _employee.привилегии - person Sabyasachi Ghosh; 24.10.2013
comment
Я пробовал с базовым путем, таким как /acl/acl/_employee.privacy.html.erb и просто _employee.privacys.html.erb . Это та же ошибка, и я думаю, что рельсы автоматически знают путь по умолчанию. Поиск в: /home/alex/Project/app/views, потому что у контроллера есть папка acl, а затем имя acl_controller.rb - person ROR senior dev; 24.10.2013
comment
да, рельсы автоматически проверяют вашу папку просмотра, которую вам нужно указать позже. - person Sabyasachi Ghosh; 24.10.2013
comment
просто измените имя файла _employee_привилегии.html.erb и убедитесь, что вы дали неправильное имя файла _employee.привилегии.html.erb - person Sabyasachi Ghosh; 24.10.2013
comment
Что именно ты предлагаешь мне изменить? Строка employee_privacy.js.erb при частичном рендеринге? Потому что я сделал, и результат тот же. Или, может быть, вы говорите, что мне нужно изменить имя файла представления или этого js на что-то другое? Извините, немного запутался.. - person ROR senior dev; 24.10.2013