我想从复选框中获取参数并修改值。 因此,如果选中该复选框,则该值应位于模型1中,否则为0.
每当我检查模型时,它都会对我说:
#<User id: 1, name: "admin", email: "admin@bl.ch", created_at: "2013-11-04 07:18:34", updated_at: "2013-11-04 07:18:34", password_digest: "$2a$10$Gk7IF2OE1GxxeZdqFXygMezwNrurv.6yemuOFSNjLKFS...", role: nil>
应为role: 1
或role: 0
控制器
def create
role = User.new(params[:role]) #get params
# if role.exists?
if role == 0
role = 0
else
role = 1
end
end
HTML
<% provide(:title, 'Log In') %>
<div class="row">
<div class="span6 offset3">
<%= render 'shared/error_messages' %>
<%= form_for(@user) do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.label :email, 'E-Mail' %>
<%= f.text_field :email %>
<%= f.label :password, 'Passwort' %>
<%= f.password_field :password %>
<%= f.label :password_confirmation, "Passowrt wiederholen" %>
<%= f.password_field :password_confirmation %>
<%= f.label :role, 'Ist Admin?'%>
<%= f.check_box :role %><br><br>
<%= f.submit "Account erstellen", class: "btn btn-large btn-primary" %>
<% end %>
</div>
</div>
答案 0 :(得分:0)
由于role
是新的User
对象,因此您不想测试role == 0
。
如果要根据传递的参数设置角色,请使用if params[:role]
。要修改User
对象的角色,请使用role.role=
。
如果您将对象user
或new_user
命名为role
只是User
的属性,那就不那么容易混淆了。
if params[:role]
role.role = 0
else
role.role = 1
end
答案 1 :(得分:0)
嗨虽然我不确定,但似乎你没有使用强参数,你必须拥有它似乎你没有添加:在你的允许参数列表中的角色,这就是为什么你要承受所有这些手动的痛苦测试params [:role]的值。更好地添加:在您允许的参数列表中的角色 请阅读以下链接: - http://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters.html
答案 2 :(得分:0)
我认为您对User对象和角色感到困惑。由于您是通过新方法创建用户对象,因此必须使用点方法访问属性。
user = User.new(params[:role])
这给出了一个用户对象。现在,您可以将所有其他属性作为getter方法访问。
if user.role == 0
#do something
else
#do something
end
最后,您可以执行 user.save 来保存所有模型值。这样,下次您可以访问角色属性。