1

User有一个UserProfile
然后UserProfilewanted_message列作为字符串。

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

我怎样才能?现在,如果我按“更新”,它会将我带到网址“/users/12”

我不希望这样:(我希望在不加载任何页面的情况下更新它(Ajax 请求)。
然后我想update_message用户控制器中调用 Action

我怎样才能?

    <%= 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 %>
4

1 回答 1

2

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

这可以帮助您在 Rails 表单中使用 ajax http://edgeguides.rubyonrails.org/working_with_javascript_in_rails.html

这是一个示例表格,虽然它是在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

在关联的 polls 模型中调用该方法切换 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'
于 2013-06-14T16:15:45.773 回答