html - 使用 patch 方法从 form_for 传递时,Param 返回 nil 值
问题描述
我正在实施一个投票系统,当课程已经被赞成/反对时,单击反对/反对将分别切换到该投票,再次单击将删除该投票(类似于 Reddit)。虽然投票和销毁投票正确执行,但我在尝试使用 form_for 和 patch 方法更新投票时遇到问题,其中 vote_type 的值返回 nil
我的投票控制器
class VotesController < ApplicationController
def create
@vote = Vote.new(secure_params)
@vote.course = Course.find(params[:course_id])
if @vote.save
respond_to do |format|
format.html { redirect_to :courses }
format.js
end
end
def update
vote = Vote.find_by(user: current_user)
vote.update_attribute(:vote_type, update_vote_params)
redirect_to :courses
end
def destroy
vote = Vote.find_by(user: current_user)
vote.destroy
redirect_to :courses, :notice => 'Unvoted!'
end
private
def secure_params
params.require(:vote).permit( :user_id, :vote_type )
end
def update_vote_params
params.require(:vote).permit(:vote_type)
end
end
我的 index.html.erb
<% if Vote.exists?(user: current_user) && Vote.find_by(user: current_user).vote_type.equal?(-1) %>
<%= form_for course.votes.build, url: course_vote_path(course, Vote.find_by(user: current_user).id), method: :patch do |f| %>
<%= f.hidden_field :vote_type, value: 1 %>
<%= f.submit 'Upvote', class: 'btn btn-default' %>
<% end %>
<% elsif Vote.exists?(user: current_user) && Vote.find_by(user: current_user).vote_type.equal?(1) %>
<%= form_for course.votes.build, url: course_vote_path(course, Vote.find_by(user: current_user).id), method: :delete do |f| %>
<%= f.submit "Upvote", class: 'btn btn-default' %>
<% end %>
<% else %>
<%= form_for course.votes.build, url: course_votes_path(course) do |f| %>
<%= f.hidden_field :user_id, value: current_user.id %>
<%= f.hidden_field :vote_type, value: 1 %>
<%= f.submit 'Upvote', class: 'btn btn-default' %>
<% end %>
<% end %>
我的路线.rb
Rails.application.routes.draw do
get 'vote/create'
get 'vote/destroy'
get 'courses/new'
get 'users/new'
resources :courses do
resources :votes, only: [:create, :destroy, :update]
end
resources :users
end
我希望参数为 vote_type 传递 1,但是,实际输出为 nil
解决方案
推荐阅读
- html - HTML文本字段输入->我页面上的站点
- r - rCharts - 交互式矩阵图
- ipython - 如何在 Jupyter 中使用制表符完成探索模块?
- java - 在 Wildfly 8 中禁用 JAX-WS 客户端的分块传输编码
- java - 测试 Java 程序的最佳方法
- teamcity - 如何使用 teamcity 运行并行 cypress 测试
- google-cloud-dataflow - 谷歌云数据流自动缩放不起作用
- android - 任务“:app:transformClassesAndResourcesWithR8ForDebug”问题执行失败
- java - 固定大小的长数组的运行时间
- java - 如何获取具有特定格式的子字符串