Ruby on Rails:如何将动态分配的链接ID传递给控制器​​方法

时间:2013-06-15 21:35:22

标签: ruby-on-rails ruby

对不起,如果我搞砸了,但我是新来的,所以请耐心等待。

这就是我想要做的事情。我想根据我的数据库中的用户ID动态地为链接分配ID标签。然后根据我点击的链接,我希望该链接调用控制器帮助程序并将其ID传递给辅助方法。

到目前为止,我能够为每个用户动态分配每个链接,但我的问题是当我点击链接并且它使用ID调用控制器方法 callThis 时,它会得到最后一个用户(数据库中的最后一个用户)ID,而不是我单击的链接的用户ID。

我的问题是,如何让它发送我点击的链接的ID,而不是数据库中最后一个用户的ID?

这是我的代码。

index.html.erb

<div id="profile"></div>
<table>
<% @users.each do |u| %>
    <% if !u.nil? and u.department_id == department.id %>
      <tr class="<%= department.id %>" style="display:none;text-align:left;">
        <td>
          <a href="#id-<%= u.id %>" id="id-<%= u.id %>" onclick="<%= callThis(u.id) %>; refresh();">
            <%= "#{u.first_name} #{u.last_name}" %> 
          </a>
        </td>
      </tr>
    <% end %> 
  <% end %>
</table>
<script>
  function refresh(){
    $('#profile').html("<%= escape_javascript(render(:partial => 'profile')) %>"); 
  }
</script>

professors_controller.rb

class ProfessorsController < ApplicationController
  helper_method :callThis
  helper_attr :get_id
  attr_accessor :get_id

  def index
    @departments = Department.all
    @users = User.with_role :Professor
    @search  = @users.search(params[:q])
    @result = @search.result
    @id = 0
  end

  def callThis(id)
    @id = id
  end
  def get_id
    @id
  end
end

profile.html.erb

<%= get_id.to_s %>

1 个答案:

答案 0 :(得分:0)

为什么不直接在params哈希中传递id并使用ajax来呈现配置文件视图?

   <td>
     <%= link_to "#{u.first_name} #{u.last_name}", name_of_your_path({:user_id => u.id), :"data-remote" => true %>

    </td>

然后在您的控制器中

class ProfessorsController < ApplicationController
  def profile
    @user = User.find(params[:user_id])
    respond_to do |format|
      format.js
    end
  end
 end

然后创建一个带有js扩展名的视图。 “profile.js.erb”并在该文件中

$('#profile').html("<%= escape_javascript(render(:partial => 'profile')) %>");