Html Rails-NoMethodError(未定义的方法&x27;允许&x27;用于";reps";:字符串)
所以我尝试在Rails 5中从一个表单创建多个对象。这在Rails4.2中运行得非常好,我不确定是什么导致了错误(我想这与视图有关) 升级到rails 5后遇到的另一个问题是,现在我的表单只提交最后一条记录。我使用此演练作为参考: 及 这是我发送的参数Html Rails-NoMethodError(未定义的方法&x27;允许&x27;用于";reps";:字符串),html,ruby-on-rails,Html,Ruby On Rails,所以我尝试在Rails 5中从一个表单创建多个对象。这在Rails4.2中运行得非常好,我不确定是什么导致了错误(我想这与视图有关) 升级到rails 5后遇到的另一个问题是,现在我的表单只提交最后一条记录。我使用此演练作为参考: 及 这是我发送的参数 Parameters: {"utf8"=>"√", "authenticity_token"=>"3j8A0oNW3sM5VIi11ZEHwpwlAhvY3 vml1kcLHfWdptySKSeJokRmBXObh/HEFBwG4/Q
Parameters: {"utf8"=>"√", "authenticity_token"=>"3j8A0oNW3sM5VIi11ZEHwpwlAhvY3
vml1kcLHfWdptySKSeJokRmBXObh/HEFBwG4/QC8PdfX7NKbkrGjOfI6Q==", "exercise_id"=>"16
5", "exercise_sets"=>{"reps"=>"1", "weight"=>"1"}, "exerciseName"=>"imsick", "co
mmit"=>"Save changes"}
错误
NoMethodError (undefined method 'permit' for "reps":string)
练习控制器:
def create
if current_trainer
savedMirror = current_trainer.exercises.find_by_name(params[:exerciseName])
params['exercise_sets'].each do |set|
#set[:timeFormat] = savedMirror.exercise_sets[0].timeFormat
#set[:weightFormat] = savedMirror.exercise_sets[0].weightFormat
#set[:distanceFormat] = savedMirror.exercise_sets[0].distanceFormat
ExerciseSet.create(exercise_set_params(set))
end
flash[:notice] = "Sets added"
redirect_to (:back)
end
end
private
def exercise_set_params(e_params)
e_params.permit(:id, :reps, :weight, :weightFormat, :time, :timeFormat, :distance, :distanceFormat, :exercise_id, :_destroy)
end
视图:
<%savedMirror = current_trainer.exercises.find_by_name(e.name)%>
<%= form_tag url_for(controller: "exercise_sets", action: "create") do%>
<ul class="list-group">
<% e.sets.times do |i|%>
<%= fields_for "exercise_sets[]", @exerciseSet do |f| %>
<li class="list-group-item">
<label>Set: <%=i+1%></label>
<%#= f.number_field :user_id, value: e.user_id, style:"visibility:hidden; margin:-15px;"%>
<%= hidden_field_tag(:exercise_id, e.id) %>
<div class = "row">
<% if savedMirror.exercise_sets[0].reps == 1%>
<div class="col-sm-3">
<%= f.label :reps, "Reps" %><br>
<%= f.text_field :reps, class: "form-control"%>
</div>
<%end%>
<% if savedMirror.exercise_sets[0].weight == 1%>
<div class="col-sm-3">
<%= f.label :weight, "Weight" %><br>
<%= f.text_field :weight, class: "form-control"%>
</div>
<%end%>
<% if savedMirror.exercise_sets[0].time == 1%>
<div class="col-sm-3">
<%= f.label :time, "Time" %><br>
<%= f.text_field :time, class: "form-control"%>
</div>
<%end%>
<% if savedMirror.exercise_sets[0].distance == 1%>
<div class="col-sm-3">
<%= f.label :distance, "Distance" %><br>
<%= f.text_field :distance, class: "form-control"%>
</div>
<%end%>
</div>
</li>
<%end%>
<%end%>
<br>
<%= hidden_field_tag(:exerciseName, e.name) %>
<%=submit_tag%>
</ul>
<% end %>
<%end%>
-
设置:
非常感谢您的帮助,谢谢 您需要添加
。require(:exercise)
(我假设您的模型名为exercise)才能使用强参数
如果您未通过模型,则要求将使您的应用程序出现错误。因为白名单中的参数是为该模型定义的
替换
def exercise_set_params(e_params)
e_params.permit(:id, :reps, :weight, :weightFormat, :time, :timeFormat, :distance, :distanceFormat, :exercise_id, :_destroy)
end
与
def exercise_set_params(e_params)
e_params.require(:exercise).permit(:id, :reps, :weight, :weightFormat, :time, :timeFormat, :distance, :distanceFormat, :exercise_id, :_destroy)
end
希望它能起作用 您需要添加
。require(:exercise)
(我假设您的模型名为exercise)才能使用强参数
如果您未通过模型,则要求将使您的应用程序出现错误。因为白名单中的参数是为该模型定义的
替换
def exercise_set_params(e_params)
e_params.permit(:id, :reps, :weight, :weightFormat, :time, :timeFormat, :distance, :distanceFormat, :exercise_id, :_destroy)
end
与
def exercise_set_params(e_params)
e_params.require(:exercise).permit(:id, :reps, :weight, :weightFormat, :time, :timeFormat, :distance, :distanceFormat, :exercise_id, :_destroy)
end
希望它能起作用 它看起来像是
:rep
,和:weight
,作为嵌套参数传递,如下所示
"exercise_sets"=>{"reps"=>"1", "weight"=>"1"}
所以我很想试试这个:
e_params.permit(:id, exercise_sets: [:reps, :weight], :weightFormat, :time, :timeFormat, :distance, :distanceFormat, :exercise_id, :_destroy)
请注意嵌套:
exercise_sets: [:reps, :weight]
也许这样就可以了。它看起来像是
:rep
,和:weight
,作为嵌套参数传递,如下所示
"exercise_sets"=>{"reps"=>"1", "weight"=>"1"}
所以我很想试试这个:
e_params.permit(:id, exercise_sets: [:reps, :weight], :weightFormat, :time, :timeFormat, :distance, :distanceFormat, :exercise_id, :_destroy)
请注意嵌套:
exercise_sets: [:reps, :weight]
也许这样就可以了。修复了问题:
我不是以散列形式传递值,而是以数组形式传递。我通过将各个字段更改为:
<input type="text" name="exercise_sets[][reps]" class="form-control" />
<input type="text" name="exercise_sets[][weight]" class="form-control" />
。。。等等。解决了这个问题:
我不是以散列形式传递值,而是以数组形式传递。我通过将各个字段更改为:
<input type="text" name="exercise_sets[][reps]" class="form-control" />
<input type="text" name="exercise_sets[][weight]" class="form-control" />
。。。以此类推。在我的例子中,我在参数中使用axios为ajax发送数据时遇到了同样的问题,解决方案是在“数据”中添加值,而不是在“参数”中添加值
在我的例子中,我在参数中使用axios为ajax发送数据时遇到了同样的问题,解决方案是在“数据”中添加值,而不是在“参数”中添加值
谢谢你的帮助!不幸的是,我现在得到了这个错误:NoMethodError(私有方法'require'为“reps:string”调用)我相信这与我提交的参数的格式有关。谢谢你的帮助!不幸的是,我现在得到了这个错误:NoMethodError(私有方法'require'为“reps:string”调用)我相信这与我提交的参数的格式有关。您没有阅读代码<代码>参数['exercise|u set']。每个do | set |。。。练习设置参数(set)因此
e\u参数
已经是一个参数对象,应该只包含有问题的嵌套键。是的,我的错,看起来这个家伙解决了他的问题:)你没有读代码<代码>参数['exercise|u set']。每个do | set |。。。练习设置参数(set)因此e\u参数
已经是一个参数对象,应该只包含所讨论的嵌套键。是的,我的错,看起来这个家伙解决了他的问题:)你能用你对Rails代码所做的更改来回答吗,并在一天后将其标记为答案?好的,发布了!你能用你对Rails代码所做的修改来做一个答案吗,并在一天后将其标记为答案?好的观点,发布!