2014-10-24 7 views
0

Я новичок в рубин на рельсах, поэтому, пожалуйста, помогите мне :) Это моя ошибканеопределенный метод `find_by»

NoMethodError in Welcome#sucess 
Showing ..app/views/welcome/sucess.html.erb where line #8 raised:  
undefined method `find_by' for #<ActiveRecord::Relation:0x41dca80> 
Extracted source (around line #8): 

5: <%= @user.pass%><br /> 
6: <% if current_user && current_user != @user %> 
7: <% if current_user.following.include?(@user) %> 
8:  <%= form_for(current_user.following_relations.find_by(following_id: @user.id), 
9:    html: { method: :delete }) do |f| %> 
10: <%= f.submit "Unfollow", class: "btn" %> 
11: <% end %> 

Это мое отношение контроллер

def destroy 
    user = Relations.find(params[:id]).following 
    current_user.unfollow(user) 
    redirect_to user 
    end 

моя модель пользователя

def unfollow(other_user) 
    following_relations.find_by(following_id: other_user.id).destroy 
    end 

, пожалуйста, помогите мне исправить это

+1

Какая версия Rails вы используете? find_by работает только на рельсах> = 4.0 – Santhosh

+0

Я использую рельсы ver 3.2.19 – mayoneQD

ответ

1

Вы можете попробовать это:

<%= form_for(current_user.following_relations.find_by_following_id(@user.id),html: { method: :delete }) do |f| %> 

Модель:

def unfollow(other_user) 
    following_relations.find_by_following_id(other_user.id).destroy 
    end 

надеюсь, что он работает

+0

Это работает !! Спасибо! – mayoneQD

+0

@mayoneQD Приятно слышать, что он работает – anusha

+1

объяснение того, почему это работает, было бы здорово, учитывая, что это принятый ответ. – sevenseacat

2

Как вы используете версию Rails (3.2.19), который dosen't поддержку find_by(), вам нужно использовать старый dynamic finders.

Так, скорее всего, он будет работать, если вы меняете:

def unfollow(other_user) 
    following_relations.find_by(following_id: other_user.id).destroy 
end 

в

def unfollow(other_user) 
    following_relations.find_by_following(other_user.id).destroy 
end 
Смежные вопросы