【问题标题】:redirect_to causes template is missing errorredirect_to 导致模板丢失错误
【发布时间】:2013-11-03 03:43:22
【问题描述】:

我正在从 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_privileges.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>

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

任何帮助将不胜感激。

【问题讨论】:

    标签: javascript ruby-on-rails ruby-on-rails-3 partial-views renderpartial


    【解决方案1】:

    请提供您要渲染的部分的相对路径。

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

    render partial 之类的选项:'/folder_path/employe_privileges'

    【讨论】:

    • @MalusAlexandru 您是否提供了您要访问的文件的相对路径
    • 让它 _employee_privileges.html.erb 不是 _employee.privileges
    • 我尝试使用基本路径,例如 /acl/acl/_employee.privileges.html.erb 和 _employee.privileges.html.erb 。这是同样的错误,我认为 rails 自动知道默认路径“搜索:”/home/alex/Project/app/views“”因为控制器有文件夹 acl,然后是名称 acl_controller.rb
    • 是的,rails 稍后会自动检查您需要指定的视图文件夹。
    • 只需更改文件名 _employee_privileges.html.erb 并检查您是否提供了错误的文件名 _employee.privileges.html.erb
    猜你喜欢
    • 2014-04-16
    • 2016-03-27
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    相关资源
    最近更新 更多