我想从视图中调用rails函数,然后保持相同的视图

时间:2015-01-30 12:49:38

标签: jquery ruby-on-rails

我对rails非常陌生,这是我第一次尝试真正的应用程序,所以请原谅我的无知:)

我想从主视图中调用自定义方法(非CRUD),并希望在函数通过后重新加载原始页面。这是方法:

def push
push_to_shopify

if Article.count == 0
  flash[:info] = "All posts pushed to Shopify."
  render :nothing => true
else
  redirect_to :back
end
end

push_to_shopify是我在控制器助手中定义的一种方法:

def push_to_shopify
    Article.each do |a|
    ShopifyAPI::Article.new(
        :title => a.title,
        :author => a.author,
        :body_html => a.body_html,
        :published_at => a.published_at,
        :tags => a.tags,
        :summary_html => a.summary_html,
        :blog_id => a.blog_id
        )
    Article.destroy(a.id)
    end
end

这就是我试图称之为:

<%= link_to 'Push all articles to Shopify', '#', id: "push-link" %>

</div>

<script>
var callExecuter=function(){
$.ajax({
type:'POST',
url: articles_push_path
});

success:function(){
  window.location = "<%= calendars_url %>";
}

}

$(document).on("click","#push-link",callExecuter);
</script>

有什么想法?谢谢!

1 个答案:

答案 0 :(得分:0)

您有两种选择:

Rails方式:

remote: true上设置link_to是最简单的方法。检查文档here。你的链接看起来像这样:

<%= link_to 'Push all articles to Shopify', '#', id: "push-link", remote: true %>

找到项目来源here,并在Rails guide

上找到类似的示例

Javascript方式

如果您想坚持使用代码,只需使用 event.preventDefault()即可阻止点击链接的正常操作!所以你会有这样的事情:

$(document).on("click","#push-link", function(e) {
  e.preventDefault();
  // Your AJAX code
});