User
has_one UserProfile
。
然后UserProfile
将wanted_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 %>
答案 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'