Незаданный вызов песни # найти - PullRequest
0 голосов
/ 01 декабря 2018

Я недавно добавил свой проект в Codacy и получаю сообщение об ошибке в следующих строках кода (также в одной другой области, но мне кажется, что это проще всего понять):

def new
  @arrangement = Arrangement.new
  @arrangement.song_id = params[:song_id]
  @song = Song.find(params[:song_id]) # This is the offending line
  authorize @arrangement
end

Песня может иметь одну или несколько аранжировок, и song_id передается в качестве одного из параметров в контроллер.ERD проекта: Project ERD

Codacy говорит, что

Поиск с незаданной областью (и связанные методы) являются формой прямой ссылки на объект.Доступ к моделям, принадлежащим к другой модели, обычно должен осуществляться с помощью запроса с областью действия.

Например, если учетная запись принадлежит пользователю, это может быть небезопасная находка с незаданной областью

Iможно увидеть, как это было бы плохо, если находка ссылалась на учетную запись пользователя.В этом приложении ссылка @song позволяет мне отображать название песни в представлении new.

Будет ли лучше использовать вместо этого название песни?

Что-то построки:

def new
  @arrangement = Arrangement.new
  @arrangement.song_id = params[:song_id]

  # Reworked code
  song = Song.find(params[:song_id])
  @song_title = song.name
  @artist_name = song.artist.name
end

База кода на момент написания этой статьи находится на моей ветке github so_1 .

Та же проблема возникает еще в нескольких местах вВ моем проекте это был самый простой способ найти лучший способ структурировать мой проект.

Обратите внимание, что другие проблемы в SO и поисках Google, касающиеся поиска с незаданной областью, не отвечают на этот вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...