Ruby: неопределенный метод `find_by_username '

Я следил за учебным Руководством для подписчиков и все время получаю сообщение об ошибке undefined method `find_by_username 'для линии.

<%= render '/components/follow_button', :user => User.find_by_username(params[:id]) %>

show.html.erb

    <%= render '/components/follow_button', :user => User.find_by_username(params[:id]) %>
            <div class="panel panel-default">
              <div class="panel-body">
                 <h5 style="color: grey; font-size: 125%;">Who to follow</h5>
                 <% for @u in @toFollow do %>
                   <p style="font-weight: bold; opacity: 0.85;" ><a href="/user/<%= @u.username %>"><%= @u.username %></a></p>
                 <% end %>
              </div>
            </div>

user.rb

  def unfollow(other)
active_relationships.find_by(followed_id: other.id).destroy

_follow_button.html.erb

<% if current_user.id != user.id %>
<div class="panel panel-default">
    <div class="panel-body">
        <center>
            <% if !current_user.following?(user) %>
                <%= form_for(current_user.active_relationships.build) do |f| %>
                    <div><%= hidden_field_tag :followed_id, user.id %></div>
                    <%= f.submit "Follow", class: "btn btn-primary" %>
                <% end %>
            <% else %>
                <%= form_for(current_user.active_relationships.find_by(followed_id: user.id),
                    html: { method: :delete }) do |f| %>
                    <%= f.submit "Unfollow", class: "btn" %>
                <% end %>
            <% end %>
        </center>
    </div>
</div>

Я баловался уже целую вечность и не могу с этим разобраться. Любая помощь будет оценена по достоинству. Не стесняйтесь спрашивать больше кода и т. Д.


person HJDavies    schedule 06.08.2016    source источник
comment
Можете ли вы опубликовать файл схемы / миграции для User модели?   -  person Pramod    schedule 06.08.2016
comment
Обратите внимание, что вы пытаетесь найти пользователя на основе имени пользователя, но передаете идентификатор User.find_by_username(params[:id]. Однако, вероятно, это не причина вашей ошибки.   -  person Marius Pop    schedule 06.08.2016


Ответы (2)


В более новой версии рельсов вы должны использовать следующий код:

Внутренний контроллер:

@user = User.find_by(username: username)
person r3b00t    schedule 06.08.2016

В Rails 4 и новее методы find_by_... устарели, поэтому ваш User.find_by_username не будет работать для Rails 4 и новее. Вы должны иметь возможность использовать либо:

User.find(id)

or

User.where(:username=> username)
person Dawcars    schedule 06.08.2016