Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 Rails强参数无法识别我的参数_Ruby On Rails 4_Strong Parameters_Actioncontroller - Fatal编程技术网

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