【问题标题】:How can I send the results from a form :remote => true in Rails 3 back to the page?如何将表单的结果 :remote => true 在 Rails 3 中发送回页面?
【发布时间】:2011-03-24 18:25:12
【问题描述】:

这是我的控制器的一部分:

if @invite.save
      UserMailer.invite_email(@invite).deliver
      respond_with do |format|
        format.html do
          if request.xhr?
            render :text => "sent" , :layout => false
          else
            flash[:notice] = "Successfully created invite."
            redirect_to @invite
          end
        end
      end
    else
      render :action => 'new'
    end

这是我的观点:

<h3>Invite a Friend</h3>
<%= form_for @invite, :remote => true do |f| %>
  <%= f.email_field :recipient_email, :class => 'submittable' %></br>
  <%= f.submit %>
<% end %>

我需要做什么才能使“已发送”文本或我放在那里的任何内容出现在视图上的表单正上方?

我试过:update =&gt; :status,但没用。

【问题讨论】:

    标签: ruby-on-rails ajax forms


    【解决方案1】:

    简短的回答是,您必须发回执行的 javascript,而不仅仅是发回“已发送”之类的文本。使用您的示例(并假设您使用的是 jQuery):

    if request.xhr?
      render :text => "$('#invite_form').before('<div>Sent!</div>');" , :layout => false
    else
      ...
    end
    

    (确保表单有 id 并使用它而不是 #invite_form。)

    由于您在表单上使用remote: true,它应该会自动执行响应。不过,总的来说,我认为稍微清理一下响应逻辑并将 xhr 响应分离到它自己的模板中会更好。查看 “使用 responds_with” 部分下的此页面,了解一些很好的示例: http://asciicasts.com/episodes/224-controllers-in-rails-3

    【讨论】:

    • @mirthlab -- 我明白了......我发现使用 Rails 2 使用 :update 更容易......我认为 Rails 使用原型,我应该使用 jquery gem 来代替吗?跨度>
    • 使用 Prototype 并没有错,只是 :text =&gt; "..." 行必须使用原型语法。不过,Rails 3.1 默认会附带 jQuery(如 DHH on Twitter 所述),因此可能值得熟悉它。
    • @mirthlab -- 我明白了,所以以前我们不必编写任何 javascript,对,但现在我们学习 jquery 来使用 javascript 而不是使用 rails?谢谢...
    • @mirthlab -- 哪种方法,还有一种方法 os 使用 create.js.erb 有什么区别或好处?
    • @mirthlab,我明白了,如果我使用 responds_with 并将其放入 create.js.erb 中,会这样做吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 2016-02-18
    相关资源
    最近更新 更多