【问题标题】:render :update do |page| is not working correctly with Rails3.X渲染:更新做|页面| Rails3.X 不能正常工作
【发布时间】:2012-08-22 22:08:16
【问题描述】:

我的 routes.rb 中有以下内容:

  match 'admins/approve' => 'admins#approve', :as => :admins_approve, :method => :post

在我的 admins_controller.rb 我有:

def approve
  render :update do |page|
      page << "alert(" + params[:note] + ");"  
  end           
end

在我的管理员/index.html.erb 中:

<% @users.each do |user| %>
  <tr>
    <td class= "action_add_note">
        <%= form_tag admins_approve_path, :id => "form_note_#{user.id}", :remote=> true  do %> 
          <%= text_area_tag 'note' %>
        <% end %>
        <%= link_to_function content_tag(:i, "", :class => 'icon-ok' ), 
                  "$('#form_note_#{user.id}').submit();", :class => "btn"%>
    </td>
  </tr>
<% end %>

我知道我可以使用按钮而不是功能,但这里不是这种情况,无论如何,每当我提交它时,我都会以某种方式得到错误的路径并出现以下错误:

ActionView::MissingTemplate (Missing template admins/update, application/update with {:locale=>[:en], :formats=>[:js, "application/ecmascript", "application/x-ecmascript", :html, :text, :js, :css, :ics, :csv, :png, :jpeg, :gif, :bmp, :tiff, :mpeg, :xml, :rss, :atom, :yaml, :multipart_form, :url_encoded_form, :json, :pdf, :zip], :handlers=>[:erb, :builder, :coffee]}. Searched in:
* "/Users/Apple/code/rails_pp/app/views"
* "/Users/Apple/.rvm/gems/ruby-1.9.2-p180/gems/twitter-bootstrap-rails-2.1.1/app/views"
app/controllers/admins_controller.rb:11:in `approve'

Rendered /Users/Apple/.rvm/gems/ruby-1.9.2-p180/gems/actionpack-3.2.6/lib/action_dispatch/middleware/templates/rescues/missing_template.erb within rescues/layout (0.6ms)

【问题讨论】:

  • 请注意我使用的是 jQuery 而不是原型
  • 您想要的功能是什么?您是否尝试向批准操作提交注释,并且只有一个带有注释数据的 javascript 警报框?
  • 是的,这不是我要寻找的最终结果,但至少我无法完成这项工作..你知道发生了什么吗?
  • 好的,使用 jquery 似乎会创建单独的文件approve.js.erb 并在那里执行逻辑,但最好的方法是将我的 ruby​​ 代码包含在 js.erb 文件中或控制器?就像让我们假设使用 params[:note] 我想更新用户 User.update_attributes(:note => params[:note]),我应该把它放在哪里?在 admin_cotroller 或approve.js.erb 文件中的def 批准?

标签: ruby-on-rails ruby ruby-on-rails-3 rjs


【解决方案1】:

取出 link_to_function 并将其添加到您的 form_tag

<%= text_area_tag 'note' %>
<%= submit_tag "Submit %>
 <% end %>

在您的管理控制器中

def approve
  @note = params[:note]
  current_user.update_attribute(:note, @note)
  respond_to do |format|
    format.js
  end
end

然后创建approve.js.erb文件

 alert("<%= j(@note) %>");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    • 2015-08-26
    • 1970-01-01
    相关资源
    最近更新 更多