2

follow_id、follower_id、およびstatusの関係テーブルがあります。ユーザーモデルで「hasmanythrough」を使用して関連付けを作成しています。ユーザーには多くのフォロースルーがあり、逆の関係で多くのフォロースルーを行っています。ユーザーが別のユーザーをフォローすると、ステータスはデフォルトで「要求済み」になります。

したがって、ユーザーにはフォロワーのリストがあり、それぞれのステータスは「要求済み」です。

このフォロワーのリストに必要なのは、putメソッドまたはその関係を見つけてステータス文字列を「承認済み」に更新するフォームを含むlink_toです。とても簡単なようですが、私は何日も探していて、それを理解することができません。これは私がこれまでに持っているものです:

users_controllerで、ステータスを「要求済み」から「承認済み」に変更するアクション:

def activate
  @user = User.find(params[:id])
  params[:status] = {:status => 'approved'}
  @user.status = params[:user][:status]
  @user.save
  render 'show_followers'
end 

これはusers_controllerにあり、フォロワーを一覧表示します。

def followers
 @title = "Followers"
 @user = User.find(params[:id])
 @users = @user.followers.paginate(:page => params[:page])
 render 'show_followers'
end

これは、おそらくuser.rbモデルでは正しくないステータスを定義する場所です。

def status
    Relationship.status.find_by_follower_id(self)
end

これは私がフォロワーを表示するページです:

      <% unless @users.empty? %>
        <% @users.each do |user| %>
        <tr>
            <td><%= image_tag user.avatar.url(:thumb) %></td>
            <td><%= user.full_name %></td>
            <td><%= user.company %></td>
            <td><%= user.approval.status %></td>
        <%end%>
            <td><%= form_for @user, url: activate_user_path(@user), :html => { :method => :put } do |f| %>
                <%= f.submit "approve" %>
                <% end %>
            </td>

        </tr>
        <%= will_paginate @users %>
        <% end %>

関係テーブルのその文字列を「承認済み」に更新する方法を知っている人はいますか?

4

1 に答える 1

2

あなたのフォームに潜在的な問題があると思います。それは&ではuserなくforメソッドであるべきだと思います (あなたのメソッドで定義されていないはずです) 。承認されるすべてのフォロワーと一緒にリモートリンクを作成し、リンクを使用してステータスを更新したいのですが、それは後で説明します。@userparams[:user][:status]activateparams[:user][:status]nil

したがって、フォームは次のとおりです。

<%= form_for user, url: activate_user_path(user), :html => { :method => :put } do |f| %>
  <%= f.submit "approve" %>
<% end %>

@userそして、現在のユーザーにアクセスできると仮定し、そうでない場合は、フォームを介して現在のユーザーも渡します。

def activate
  user = User.find(params[:id]) # user to be approved
  relationship = current_user.relationships.where(:follower_id => user).first # relationship record that has above user as follower and current user as followed
  relationship.update_attributes!(:status => 'approved')
  # redirect to users#followers passing current_user
end 
于 2012-03-12T08:32:46.977 に答える