Я пытаюсь изменить статус подписчика с «запрошено» на «одобрено» в модели отношений - PullRequest
1 голос
/ 12 марта 2012

У меня есть таблица отношений с follow_id, follower_id и status.Я использую «имеет много сквозных» в моей пользовательской модели для создания ассоциации.У пользователя есть много последователей и он следует многим через обратную связь.Состояние по умолчанию «запрошено», когда пользователь следует за другим пользователем.

Итак, у пользователя есть список его подписчиков, и у каждого из них статус «запрошен».

В этом списке подписчиков мне нужна ссылка link_to с методом put или формойон просто находит это отношение и обновляет строку состояния до «утверждено».Кажется, это было бы довольно легко, но я искал несколько дней и не могу понять это.Это то, что у меня пока есть:

В 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 %>

Кто-нибудь знает, как я могу просто обновить эту строку в таблице отношений на "утверждено"?

1 Ответ

1 голос
/ 12 марта 2012

Я вижу потенциальную проблему в вашей форме, думаю, что это должно быть для user, а не @user & params[:user][:status] в activate методе (params[: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 
...