如何从application.js文件中使用jQuery调用控制器操作?

时间:2011-04-01 08:07:53

标签: javascript jquery ruby-on-rails ruby ruby-on-rails-3

我正在使用jQuery自动完成插件,我想自定义此事件:

select: function(event, ui) {
           $('.topic_field').val(ui.item.topic.name);
           return false;

实际上,当选择下拉列表中的元素时,它会触发回调。截至目前,它只将选定的元素添加到文本字段中。我希望填充字段和我的应用程序向视频更新控制器操作发送POST请求,以便用户不需要明确按下按钮。我怎么能这样做?

更新:

以下是视频控制器的show视图中的表单:

<%= form_for @video, :url => {:action => "update"}, :remote => true do |f| %>
  <div class="field">
  <%= f.text_field :topic_names, :class => "topic_field" %>
  </div>
  <%= f.submit "Add Topic" %>
<% end %>

这是我的jQuery代码:

var url = $('.edit_video').attr('action');
var val = ui.item.topic.name;
$.post(url, {data:val});

这是在我的routes.rb:

resources :videos
resources :video_votes
resources :users
resources :profiles
resources :genres
resources :topics
resources :topicables
resource :session

这是我的更新操作:

def update
@video = current_user.videos.find(params[:id])

respond_to do |format|
  if @video.update_attributes(params[:video])
    format.html { redirect_to(@video) }
    format.js
  else
    format.html { render :action => "edit" }
  end
end
end

2 个答案:

答案 0 :(得分:0)

使用jquery ajax函数从您的操作URL(“/ topics / list”)或其他东西中获取数据

$.post('video/update', 
  data: {yourdata},
  function(data) {
    //callback function
  }
);

在您的视频#upd中,请确保为您的js请求返回一些内容:

def update
   blah
   respond_to do |format|
     format.js { return somethinghere }
   end
end

答案 1 :(得分:0)

查看jQuery.post文档,了解如何将数据从选择框发布到相关的控制器操作。

我不熟悉自动完成插件,但我认为它遵循选择框上的onChange事件。当用户做出选择时,您应该执行以下(未经测试):

var url = $('myForm').attr('action');
var val = $('mySelectBox').val();
$.post(url, {data:val})

在您的控制器中,您可以使用以下方式访问它:

params[:data]

将返回您的选择框的值。然后,您可以在控制器代码中正常使用它。