Ruby on rails 使用按钮_在数据库中创建新记录,错误:缺少参数或值为空

Ruby on rails 使用按钮_在数据库中创建新记录,错误:缺少参数或值为空,ruby-on-rails,ruby,ruby-on-rails-4,controller,params,Ruby On Rails,Ruby,Ruby On Rails 4,Controller,Params,我正在尝试创建一个非常基本的按钮,它将在数据库中创建一个新记录。目前,我正在“视频id”中硬编码。但是,我得到以下错误: param is missing or the value is empty: track Request Parameters: {"authenticity_token"=>"e60ap2UFOpyfCLPrqRpvYCyZrfQwZ8DtmBglYu4n", "video_id"=>"1"} 我的“轨迹”控制器中的创建方法如下所示: def cre

我正在尝试创建一个非常基本的按钮,它将在数据库中创建一个新记录。目前,我正在“视频id”中硬编码。但是,我得到以下错误:

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
<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>
我的application.html.erb中的按钮如下所示

<%= button_to 'Save track', {:controller => "tracks", :action => "create", :video_id => "1" } , :method=>:post %>
“tracks”、:action=>“create”、:video\u id=>“1”}、:method=>:post%>
任何帮助都将不胜感激,因为我已经绞尽脑汁试图解决这个错误好一阵子了。把事情放在上下文中,我最终想要实现的是以下解决方案:用户搜索关键词(音乐视频),查询Youtube API并显示前三名结果。然后,用户可以单击“保存曲目”按钮将三个youtube视频之一的视频id保存到曲目数据库中。我已经到了可以显示视频的地步,现在我正在尝试添加这个按钮

提前感谢

方法:


def track_参数
参数要求(:轨道)。允许(:视频\u id)
结束

意味着您需要特定参数的散列。在该散列(在
params
中)中,您需要一个键
轨迹
,并分配一个值,该值也是一个具有键
视频id
和整数值的散列。因此,您的参数应该如下所示:

def create
   Track.create(track_params)
   redirect_to root_path
end

def track_params
   params.require(:track).permit(:video_id)
end
<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>
params={track:{video\u id:1}}

(只需用
曲目
包装
视频\u id

尝试按如下方式更改按钮代码:

def create
   Track.create(track_params)
   redirect_to root_path
end

def track_params
   params.require(:track).permit(:video_id)
end
<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>
“tracks”,:action=>“create”,:track=>{:video\u id=>“1”},:method=>:post%>

我希望这有帮助

顺便说一句:
track\u params
方法应该是私有的。

你在
中的问题“tracks”、:action=>“create”、:video\u id=>“1”}、:method=>:post%>

这不是构建表单()的好方法

如果仍要使用
按钮\u来
助手,请尝试使用参数传递简单路径:

<%= button_to 'Save track', "/tracks/create?video_id=5"  , :method=>:post %>
                           ^^^^^^^^^|^^^^^^|^^^^^^^^^^
                          controller|action|params
对于您的案例,Rails的方式是使用
\u路径
helper和
link\u链接到
helper


快乐的黑客行为。

“tracks”、:action=>“create”、:track=>{:video\u id=>“1”}、:method=>:post%>
生成此路径
/?track%5bdio\u id%5D=1
所以这不是正确的答案。我知道它是如何工作的(路径构建),是的,我已经测试过了。谢谢你的回答!在遵循您的解决方案之后,我还需要将其添加到我的routes.rb文件中以使其正常工作:post“/tracks/create”=>“tracks\create”