Ruby on rails 4 Rails强参数无法识别我的参数
我创建了一个表单,向属于Ruby on rails 4 Rails强参数无法识别我的参数,ruby-on-rails-4,strong-parameters,actioncontroller,Ruby On Rails 4,Strong Parameters,Actioncontroller,我创建了一个表单,向属于:article模型的:vote模型添加一条记录。如下所示,创建:vote记录的表单位于:article视图中。由于没有为这些模型使用嵌套路由,因此我没有为助手使用form\u,而是使用普通的form\u标记。我的问题是strong\u参数不允许我的隐藏字段通过 <p id="notice"><%= notice %></p> <p> <strong>Title:</strong> <%= @
:article
模型的:vote
模型添加一条记录。如下所示,创建:vote
记录的表单位于:article
视图中。由于没有为这些模型使用嵌套路由,因此我没有为助手使用form\u,而是使用普通的form\u标记
。我的问题是strong\u参数
不允许我的隐藏字段通过
<p id="notice"><%= notice %></p>
<p>
<strong>Title:</strong>
<%= @article.title %>
</p>
<p>
<strong>Body:</strong>
<%= @article.body %>
</p>
<p>
<strong>User:</strong>
<%= @article.user_id %>
</p>
<%= form_tag("/vote/#{@article.id}", method: :post) do -%>
<%= hidden_field_tag 'vote[value]', 1 %>
<%= submit_tag 'Up vote' %>
<% end -%>
<%= link_to 'Edit', edit_article_path(@article) %>
<%= link_to 'Back', articles_path %>
更新:我尝试了你的答案doz87,但我得到了以下错误:
ArgumentError in VotesController#create
When assigning attributes, you must pass a hash as an argument.
Extracted source (around line #5):
3
4
5
6
7
8
def create
@article = Article.find(params[:id])
@vote = Vote.new(:strong_vote)
@vote.user_id = current_user.id
@vote.article_id = @article.id
@vote.save
Rails.root: /home/w/Folders/playground/ruby/voter
Application Trace | Framework Trace | Full Trace
app/controllers/votes_controller.rb:5:in `create'
Request
Parameters:
{"utf8"=>"✓",
"authenticity_token"=>"AVKHgcsOwQhwWJGfSGQhIL1Lbr7yhSRaGKTrxuLcAuo=",
"vote"=>{"value"=>"1"},
"commit"=>"Up vote",
"id"=>"7"}
这不起作用的原因是您没有为新的投票分配任何内容。Params[:strong_vote]不存在
@vote = Vote.new(params[:strong_vote])
你应该这样写:
@vote = Vote.new(strong_vote)
此外,从失败的保存中捕获任何错误也是一种很好的做法。你应该用if块包装@vote.save,以防出错
if @vote.save
redirect_to @article
else
flash.now[:notice] = "Something went wrong while saving"
render 'new'
end
事实上…出于一些非常奇怪的原因..我删除了强param函数并重写了它,它工作了..但写的完全一样..哦,好吧,谢谢@doz87Yeah,你在投票中传递了一个符号。新语句需要哈希。如果使用了不带冒号的强_投票,则将传入控制器中定义的参数哈希。
@vote = Vote.new(strong_vote)
if @vote.save
redirect_to @article
else
flash.now[:notice] = "Something went wrong while saving"
render 'new'
end