Я собираюсь сосредоточиться только на проблеме, указанной в вопросе «Невозможно вызвать метод из представления» ;
Вы не можете вызвать этот метод, потому что в контексте вы ' re (представление), этот метод недоступен без инициализации контроллера, в котором он определен. Вы можете добиться этого следующим образом:
<%= songartist = SomeController.new.mylist_artist('foo') %>
Предварительно обновив метод mylist_artist
, добавив аргумент:
def mylist_artist(link)
...
end
Но вы никогда не должны этого делать, потому что мы обычно не таким образом напишите вложенные методы в Ruby. Как видите, единственное, что он возвращает, - это имя change_artist
в качестве символа, который является возвращаемым значением этого метода.
Если вы планируете использовать change_artist
в представлении слой, вы должны переместить его в помощник. Поскольку это норма, и Rails позволяет вам вызывать их без особых усилий.
Просто добавьте новый файл в свой каталог app/helpers/
и переместите туда метод:
# app/helpers/some_helper.rb
module SomeHelper
def change_artist(link)
...
end
end
Теперь, на ваш взгляд, вы можете просто сделать:
<% songartist = change_artist('foo') %>