Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在RubyonRails中,如何在不刷新页面的情况下提交消息,然后将其添加到消息列表的顶部?_Ruby On Rails_Ruby On Rails 3_Ruby On Rails 3.1 - Fatal编程技术网

Ruby on rails 在RubyonRails中,如何在不刷新页面的情况下提交消息,然后将其添加到消息列表的顶部?

Ruby on rails 在RubyonRails中,如何在不刷新页面的情况下提交消息,然后将其添加到消息列表的顶部?,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.1,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.1,我有一个micropost/消息系统,每次提交新的micropost或评论/消息时,页面都会刷新以显示它 由于我已经使用:remote=>true在我的表单上设置了ajax,我现在希望在不刷新页面的情况下添加micropost或 到目前为止,我已经: class MicropostsController < ApplicationController def create if params[:micropost][:user_id].to_i == current_user.

我有一个micropost/消息系统,每次提交新的micropost或评论/消息时,页面都会刷新以显示它

由于我已经使用:remote=>true在我的表单上设置了ajax,我现在希望在不刷新页面的情况下添加micropost或

到目前为止,我已经:

class MicropostsController < ApplicationController

def create

    if params[:micropost][:user_id].to_i == current_user.id

     @comment = Comment.new(:user_id => current_user.id)
        respond_to do |format|
            if @micropost.save

            format.js   { render :post_on_wall }
            else
            format.js   { render :form_errors }

            end
        end
    else
class MicropostsControllercurrent\u user.id)
回应待办事项|格式|
如果@micropost.save
format.js{render:post_on_wall}
其他的
format.js{render:form_errors}
终止
终止
其他的
如果表单通过了所有验证,并且用户在单击post之前实际键入了一些有效的内容,那么“If@micropost.save”将为true,它将在我命名为“post_on_wall”的文件中执行js。如果“@microspost.save”,将执行“form_errors”中的代码

在form_错误中,我添加了一个警报,以检查当用户输入nothing并单击post时,micropost不会被发布。它很好用

在“墙上张贴”文件中,我有以下内容:

$('.microposts').prepend('<%= j render("users/partials/microposts") %>');
$('.microposts')。前置('');
问题是,它基本上会抓住文件中循环的所有微操作,这些文件被呈现为“users/partials/micropost”,然后将它们放在“.micropost”分区中的所有内容之上。即使是实际的表单,也会在“.micropost”的顶部发布一个micropost在刚刚添加到页面的内容下方向下推。在本例中,我使用分页时减少了10个空格,并将per_page设置为10

这是我的html结构

<div class='cf' id='content'>
    <div id='leftColumn'>
    </div>
    <div class='microposts'>
    </div>
    <div id='rightColumn'>
  </div>
</div>

每个micropost及其相关注释都存储在一个名为“.postHolder”的类中

我觉得我走错了方向。“users/partials/microspots”指向的文件基本上有代码可以帮助一次显示几个microspots(10)。这是用于完全不同于我试图做的事情(分页+无休止的滚动)

不管怎样,我觉得我应该做的是如何检测刚刚发布的新帖子。它应该被检测为一个新的“.postHolder”类,然后在找到它之后,它应该被添加到“postHolder”列表的顶部,而不是替换它上面的micropost表单

我想创建一个单独的div来保存所有的micropost,然后把这个div放在micropost表单下面。。这样,我就不必担心表单会被压下,因为它不会在包含所有微操的div中,而事实上,我将准备使用这些微操

这仍然给我留下了一个问题,那就是获取刚刚发布的帖子,然后将其添加到列表的顶部

无论如何,我真的很想有一个例子或一些好的建议,可以帮助我实现这个功能

谢谢你的时间
亲切问候。

对于您当前的HTML/部分结构,只需执行此操作即可(替换整个MicroPost,因为这是您的部分创建的内容)

$('.microposts').html('');
但是,在将来,有一个_micropostpartial来呈现micropost,然后你就可以很容易地在.micropost的顶部预先绘制micropost

$('.microposts').html('<%= escape_javascript render("users/partials/microposts") %>');