:article
모델에 속하는 :vote
모델에 레코드를 추가하는 양식을 만들었습니다. 아래에서 볼 수 있듯이 :vote
레코드를 만드는 양식은 :article
보기입니다. 이 모델에 중첩 된 경로를 사용하지 않으므로 form_for
도우미를 사용하는 대신 일반 form_tags
을 사용하고 있습니다. 내 문제는 strong_parameters
이 숨겨진 필드를 허용하지 않는다는 것입니다.강력한 매개 변수가 내 매개 변수를 인식하지 못합니다.
<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 %>
당신이 컨트롤러 코드에서 볼 수 있듯이, 내가 가진 흰색은 PARAM 및 로그 데이터는 포스트 몸이 매개 변수 해시에 대한 올바른 형식으로 들어오는 보여 나열하지만, 내 생성 작용에 도달하지 않습니다.
class VotesController < ApplicationController
def create
@article = Article.find(params[:id])
@vote = Vote.new(params[:strong_vote])
@vote.user_id = current_user.id
@vote.article_id = @article.id
@vote.save
redirect_to @article
end
private
def strong_vote
params.require(:vote).permit(:value)
end
end
Processing by VotesController#create as HTML Parameters:{"utf8"=>"✓","authenticity_token"=>"Y6eBxpwGXGdT2toeUrxAlLW58Hj8Eux+SvoWeVUoYa8=","vote"=>{"value"=>"1"}, "commit"=>"Up vote","id"=>"7"}
Article Load (0.1ms) SELECT "articles".* FROM "articles" WHERE "articles"."id" = ? LIMIT 1 [["id", 7]]
User Load (0.1ms) SELECT "users".* FROM "users" WHERE"users"."id" = 1 ORDER BY "users"."id" ASC LIMIT 1
Rendered text template (0.0ms)
Completed 200 OK in 7ms (Views: 1.0ms | ActiveRecord: 0.4ms)
다음은 내 경로입니다. 도움이 될 수 있습니다.
devise_for :users
root 'articles#index'
resources :articles
post '/vote/:id' => 'votes#create'
업데이트 : 당신의 응답 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"}
예, 해시가 필요한 Vote.new 문에 기호로 전달합니다. 콜론없이 strong_vote를 사용한 경우 컨트롤러에 정의한 매개 변수 해시를 전달합니다. – doz87