使用Rails3自动发送Ajax表单

时间:2013-06-17 18:16:08

标签: ajax ruby-on-rails-3

我有一个名为'follow_form'的部分,它显示在另一个名为player_infos的地方。 我在“球员#show”中显示_player_infos

我的问题是,当我转到players/show时,会自动创建关系。我的意思是,players/_follow中的表单会自动发送。

follow_form部分包含:

  <% unless current_user == @player %>
  <div class="follow_form">
      <% if current_user.following?(@player) %>
        <%= render 'players/unfollow' %>
      <% else %>
        <%= render 'players/follow' %>
      <% end %>
  </div>
<% end %>

我的_follow

<%= form_for current_user.relationships.build(:followed_id => @player.id),
             :remote => true do |f| %>
  <div><%= f.hidden_field :followed_id %></div>
  <div class="actions"><%= f.submit "Suivre" , :class=>"grid_13 cursor" %></div>
<% end %>

修改

好的,我必须确切地知道我的RelationshipsController包含:

     def create
    @player = Player.find(params[:relationship][:followed_id])
    current_user.follow!(@player)

    respond_to do |format|
      format.html { redirect_to @player }
      format.js
    end
  end

follow!指的是:

 class Player < ActiveRecord::Base

   def follow!(followed)
    relationships.create!(:followed_id => followed.id)
  end

  end

所以,即使我没有点击提交按钮,我也无法理解为什么会建立这种关系。

告诉我您是否需要更多信息。 感谢

1 个答案:

答案 0 :(得分:0)

您确定自动提交表单吗?

build()关系集合的has_many方法的documentation说明如下:

  

返回已有的集合类型的一个或多个新对象   用属性实例化并通过一个链接到这个对象   外键,但尚未保存。

更改尚未保存到数据库中,但内存中的对象在两个播放器之间建立了关系。

您可以尝试直接创建对象,而不是使用relationship集合来执行此操作,并在提交表单后使用relationship集合创建它。