我正在尝试通过序列化哈希为我的应用程序构建默认清单。我不知道如何将setup_checklist哈希中的信息提取到我的视图中。任何帮助表示赞赏。
这是我的用户模型
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable
serialize :checklist, Hash
before_create :setup_checklist
private
def setup_checklist
self.checklist = {
"Organize Your Finances" => false,
"Approval Letter" => false,
"Get a Real Estate Agent and look for houses" => false,
"Find lawyer" => false,
"Get the mortgage" => false,
"Apprisal and inspection" => false,
"Close the deal" => false
}
end
end
我的view.html.erb
<%= form_for :checklist do |f| %>
<%= f.check_box :checklist %>
<% end %>
我知道我甚至不是很接近但是朝着正确方向转向会很棒
答案 0 :(得分:0)
要显示散列中的复选框,您需要迭代散列并为每个元素创建一个复选框;例如:
<%= form_for @user do |f| %>
<% @user.checklist.each do |key, value| %>
<%= f.check_box key %>
<% end %>
<% end %>
答案 1 :(得分:0)
可能不是最漂亮的,但这似乎对我有用
view.html.erb
<%= form_for @user do |f| %>
<%= f.fields_for :checklist do |c| %>
<% @user.checklist.each do |todo, completed| %>
<%= c.check_box todo %> <%= c.label todo %><br />
<% end %>
<% end %>
<%= f.submit %>
<% end %>
然后在控制器中
def update
@user = User.find(params[:id])
@user.checklist.each do |todo, completed|
@user.checklist[todo] = params[:user][:checklist][todo] == "1"
end
@user.save
redirect_to action: :show, id: params[:id]
end
当然,您可以将控制器代码移动到模型或重构上的update_checklist
方法,但对您有用,但这应该可以帮助您入门。
如果你使用强params,你需要允许每个可能的清单值,它会将它们设置为'0'或'1'而不是真或假,但控制器可能是
@user.update(params.required(:user).permit(checklist: ["Organize Your Finances", ...]))