gpt4 book ai didi

javascript - 如何使用 "link_to"而不是 "checkbox"进行 POST?

转载 作者:太空宇宙 更新时间:2023-11-03 16:22:21 28 4
gpt4 key购买 nike

enter image description here

这个想法是,当用户有一个missed_day(又名罢工)时,他会点击这个按钮。他目前可以单击一个复选框来标记 missed_day

enter image description here

习惯/表现

<div class="strikes">
<% if @habit.current_level_strike %>
<div class="btn" id="red"> <label id="<%= @habit.id %>" class="habit-id">Strikes:</label>
<% else %>
<div class="btn" id="gold"> <label id="<%= @habit.id %>" class="habit-id-two">Strikes:</label>
<% end %>
<% @habit.levels.each_with_index do |level, index| %>
<% if @habit.current_level >= (index + 1) %>
<p data-submit-url="<%= habit_level_days_missed_index_path({ habit_id: @habit.id, level_id: level.id }) %>"
data-delete-url="<%= habit_level_days_missed_path({ habit_id: @habit.id, level_id: level.id, id: 1 }) %>">
<% if @habit.current_level_strike %>
<label id="<%= level.id %>" class="level-id">Level <%= index + 1 %>:</label>
<% else %>
<label id="<%= level.id %>" class="level-id-two">Level <%= index + 1 %>:</label>
<% end %>
<%= check_box_tag nil, true, level.missed_days > 0, {class: "habit-check"} %>
<%= check_box_tag nil, true, level.missed_days > 1, {class: "habit-check"} %>
<%= check_box_tag nil, true, level.missed_days > 2, {class: "habit-check"} %>
</p>
<% end %>
<% end %>
</div>
</div>

habit.js

$(document).ready(function()
{
$(".habit-check").change(function()
{
var submitUrl = $(this).parents("p").data("submit-url");
var deleteUrl = $(this).parents("p").data("delete-url");

if($(this).is(":checked"))
{
$.ajax(
{
url: submitUrl,
method: "POST"
})
.done(function () {
location.reload();
});
}
else
{
$.ajax(
{
url: deleteUrl,
method: "DELETE"
})
.done(function () {
location.reload();
});
}
});
});

days_missed_controller

class DaysMissedController < ApplicationController
before_action :logged_in_user, only: [:create, :destroy]
before_action :correct_user, only: [:create, :destroy]

def create
habit = Habit.find(params[:habit_id])
habit.missed_days = habit.missed_days + 1
@habit.save!
level = habit.levels.find(params[:level_id])
level.missed_days = level.missed_days + 1
if level.missed_days == 3
level.missed_days = 0
level.days_lost += habit.calculate_days_lost + 2
end
level.save!
head :ok # this returns an empty response with a 200 success status code
end

def destroy
habit = Habit.find(params[:habit_id])
habit.missed_days = habit.missed_days - 1
@habit.save!
level = habit.levels.find(params[:level_id])
level.missed_days = level.missed_days - 1
level.save!
head :ok # this returns an empty response with a 200 success status code
end

private

def correct_user
@habit = current_user.habits.find(params[:habit_id])
redirect_to habits_path, notice: "Not authorized to edit this habit" if @habit.nil?
end
end

第一张图片来自首页。这是两个按钮的代码:

<%= link_to '<span class="glyphicon glyphicon-ok"></span>'.html_safe, mark_completed_path(habit), remote: true, method: 'put', class: 'update_habit', id: 'home_check' %>
<%= link_to '<span class="glyphicon glyphicon-remove"></span>'.html_safe, habit_level_days_missed_index_path({ habit_id: @habit.id, level_id: level.id }), remote: true, method: 'put', class: 'habit-check' %>

我们怎样才能让第二个按钮起作用?这次尝试给了我undefined method 'id' for nil:NilClass

这是 Gist 的。

最佳答案

您需要更改此链接

<%= link_to '<span class="glyphicon glyphicon-remove"></span>'.html_safe, habit_level_days_missed_index_path({ habit_id: @habit.id, level_id: level.id }), remote: true, method: 'put', class: 'habit-check' %>

<%= link_to '<span class="glyphicon glyphicon-remove"></span>'.html_safe, habit_level_days_missed_index_path({ habit_id: habit, level_id: habit.current_level }), remote: true, method: 'put', class: 'habit-check' %>

关于javascript - 如何使用 "link_to"而不是 "checkbox"进行 POST?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31665081/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com