Ruby on rails 使用按钮_在数据库中创建新记录,错误:缺少参数或值为空
我正在尝试创建一个非常基本的按钮,它将在数据库中创建一个新记录。目前,我正在“视频id”中硬编码。但是,我得到以下错误: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
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”