如何在不加载任何页面的情况下更新某些列的内容?

时间:2013-06-14 16:09:55

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

User has_one UserProfile
然后UserProfilewanted_message列作为字符串。

在这里,我显示输入框以更新wanted_message
如果某些用户输入任何消息,我希望它更新,然后按“更新”按钮。

我该怎么办?现在,如果按“更新”

,它会将我带到网址“/ users / 12”

我不希望这样:(我希望它在没有任何页面加载(Ajax请求)的情况下进行更新 然后我想在用户控制器

中使用名为update_message的操作

我该怎么办?

    <%= form_for(current_user, :url => {:controller => "user", :action => "update_message" }, :remote => true, :class => 'form-search') do |f| %>
        <%= f.fields_for :user_profile do |profile_form| %>
            <div class="input-append">
                <%= profile_form.text_field :wanted_message, :class => 'span6' %>
                <button type="submit" class="btn">Update</button>
            </div>
        <% end %>
    <% end %>

1 个答案:

答案 0 :(得分:2)

您必须在表单中设置remote => true并设置:method => put Put可以更新数据库中的列,remote true将配置表单以发送ajax请求。您还必须在控制器中配置update_message操作以处理ajax请求。最后,确保您的路由配置正确。您必须在routes.rb中定义该路由,并且可能需要:as => 'update_message'才能访问该路由助手方法

这可以帮助您使用轨道表格http://edgeguides.rubyonrails.org/working_with_javascript_in_rails.html

中的ajax

这是一个示例表单,但它是haml:

  = link_to "Start", polls_toggle_live_path(poll.id), :method => :put, :remote => true, :class=> 'btn btn-success btn-small start-poll', :id => poll.id

指向此控制器操作的链接

  def toggle_live
    @poll = Poll.find(params[:poll_id])
    @poll.toggle_live
    @poll.save!
  end

在关联的民意调查模型中调用此方法以切换db列值

  def toggle_live
    self.is_live = !self.is_live
  end

最后在routes.rb中配置这种方式传递正确的更新

match '/polls/toggle_live/:poll_id' => 'polls#toggle_live', :via => :put, :as => 'polls_toggle_live'