2014-11-26 3 views
1

Я пытаюсь создать очень базовую кнопку button_to, которая создаст новую запись в базе данных. На данный момент я жестко кодируюсь в «video_id». Тем не менее, я получаю следующее сообщение об ошибке:Использование button_to для создания новой записи в базе данных, ошибка: param отсутствует или значение пустое

param is missing or the value is empty: track 

Request 

Parameters: 

{"authenticity_token"=>"e60ap2UFOpyfCLPrqRpvYCyZrfQwZ8DtmBglYu4n", 
"video_id"=>"1"} 

Моих создать метод в моем контроллере «дорожка» выглядит следующим образом:

def create 
    Track.create(track_params) 
    redirect_to root_path 
end 

def track_params 
    params.require(:track).permit(:video_id) 
end 

Мой button_to в моем application.html.erb выглядит следующим образом

<%= button_to 'Save track', {:controller => "tracks", :action => "create", :video_id => "1" } , :method=>:post %> 

Любая помощь будет с благодарностью оценена, так как я ударяю головой, пытаясь решить эту ошибку довольно долго. Чтобы положить что-то в контекст, то, что я в конечном итоге хочу достичь, - это следующее решение: пользователь ищет ключевую фразу (музыкальное видео), которая запрашивает API Youtube и отображает первые 3 результата. Затем пользователь может нажать кнопку «Сохранить дорожку», чтобы сохранить видео_ид одного из трех видеороликов YouTube в базу данных треков. Я дошел до того, что могу отображать видео, и теперь я пытаюсь добавить эту кнопку.

Заранее спасибо

ответ

2

Ваша проблема в <%= button_to 'Save track', {:controller => "tracks", :action => "create", :video_id => "1" } , :method=>:post %>

это не хороший способ построить форму (button_to generates a form containing a single button that submits to the URL created by the set of options.)

, если вы все еще хотите использовать button_to помощник попробуйте пройти простой путь с Params:

<%= button_to 'Save track', "/tracks/create?video_id=5" , :method=>:post %> 
          ^^^^^^^^^|^^^^^^|^^^^^^^^^^ 
          controller|action|params 

это должно генерирует html следующим образом:

<form action="/tracks/create?video_id=5" class="button_to" method="post"> 
    <div> 
    <input type="submit" value="Save track"> 
    <input name="authenticity_token" type="hidden" value="dUZL6a3NmlEZK9aVPEKX4rTxj/dTH2ZeBw1vCybWI8w="> 
    </div> 
</form> 

Разрешить Титулы:

def create 
    Track.create(params.permit(:video_id)) 
    redirect_to root_path 
end 

Rails путь для вашего случая это использовать _path помощник и link_to помощника.

Счастливый взлом.

+0

Спасибо за ваш ответ! После выполнения вашего решения мне также нужно было добавить это в свой файл route.rb, чтобы заставить его работать: post "/ tracks/create" => "tracks # create" –

0

Метод:

def track_params params.require(:track).permit(:video_id) end

означает, что вы хотите хэш конкретных параметров. В этом хеше (в params) вам нужен ключ track и присвоено значение, которое также является хэшем с ключом video_id и целочисленным значением. Так что ваш PARAMS должен выглядеть следующим образом:

params = {track: { video_id: 1} }

(Просто упаковка video_id с track)

Попробуйте изменить код кнопки, как это:

<%= button_to 'Save track', {:controller => "tracks", :action => "create", :track => {:video_id => "1"} } , :method=>:post %>

Я надеюсь, что помогает ,

Btw .: track_params Метод должен быть закрытым.

+0

'<% = button_to 'Сохранить дорожку', {: controller =>" tracks ",: action =>" create ",: track => {: video_id =>" 1 "}},: method =>: post%> 'сгенерируйте этот путь' /? track% 5Bvideo_id% 5D = 1', поэтому это не может быть правильным ответом. –

+0

У вас такая же ошибка? – palinium

+0

Я знаю, как это работает (построение пути), и да, я его протестировал. –

Смежные вопросы