当用户在 _形式中检查:days
他已经#34;&#34;时,我希望他的日子出现在 index ,但是当前用户加载索引页面<%= habit.days %>
时出现空白,我看到当用户点击提交时,复选标记消失。
_form
<%= f.label "Committed to:" %>
<% Date::DAYNAMES.each do |day| %>
<%= f.check_box :days, {}, day %>
<%= day %>
<% end %>
&#13;
索引
<% @habits.each do |habit| %>
<td><%= habit.days %></td>
<% end %>
&#13;
我是否需要将代码添加到控制器或模型?
控制器
class HabitsController < ApplicationController
before_action :set_habit, only: [:show, :edit, :update, :destroy]
before_action :correct_user, only: [:edit, :update, :destroy]
before_action :authenticate_user!, except: [:index, :show]
def index
@habits = Habit.all
end
def show
end
def new
@habit = current_user.habits.build
end
def edit
end
def create
@habit = current_user.habits.build(habit_params)
if @habit.save
redirect_to @habit, notice: 'Habit was successfully created.'
else
render action: 'new'
end
end
def update
if @habit.update(habit_params)
redirect_to @habit, notice: 'Habit was successfully updated.'
else
render action: 'edit'
end
end
def destroy
@habit.destroy
redirect_to habits_url
end
private
def set_habit
@habit = Habit.find(params[:id])
end
def correct_user
@habit = current_user.habits.find_by(id: params[:id])
redirect_to habits_path, notice: "Not authorized to edit this habit" if @habit.nil?
end
def habit_params
params.require(:habit).permit(:missed, :left, :level, :days, :date_started, :trigger, :action, :target, :positive, :negative)
end
end
&#13;
模型
class Habit < ActiveRecord::Base
belongs_to :user
validates :action, presence: true
end
&#13;
分贝
class CreateHabits < ActiveRecord::Migration
def change
create_table :habits do |t|
t.string :missed
t.datetime :left
t.string :level
t.datetime :days
t.datetime :date_started
t.string :trigger
t.string :action
t.string :target
t.string :positive
t.string :negative
t.boolean :mastered
t.timestamps null: false
end
end
end
&#13;
现在索引视图通过以下答案得出结论:
[&#34;星期一&#34;,&#34;星期二&#34;,&#34;星期三&#34;,&#34;星期四&#34;,&#34;&#34;] < / p>
我们怎样才能让它看起来像这样?
周一,周二,周三,周四答案 0 :(得分:1)
您没有正确使用f.check_box
,该帮助程序设计用于单个属性,而不是在迭代器中使用。
您可能需要以下内容:
<%= f.collection_check_boxes :days, Date::DAYNAMES, :downcase, :to_s %>
经过一些评论和对问题的更新后,我添加了以下评论,我将其放在这里,以便答案与问题相符:
您的迁移显示days
是datetime
字段,字符串数组无法正常工作。为了使这项工作(虽然这可能不是你想要的,并且会破坏其他东西?)你需要将该字段转换为text
类型,即。迁移中t.text :days
,然后在模型中使用serialize :days, Array
创建序列化字段。
如果您检查日志,那么您将看到类似:"Unpermitted parameter: days"
的内容 - 这是因为您需要指定包含子结构(如数组或散列)的任何内容,因此而不是{{1}在您的:days
中,您需要habit_params