0

我想从复选框中获取参数并修改值。因此,如果选中该复选框,则该值应在模型 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: 1role: 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>
4

3 回答 3

0

我认为您对用户对象和角色感到困惑。由于您是通过 new 方法创建用户对象,因此必须使用点方法访问属性。

user = User.new(params[:role])

这给出了一个用户对象。现在您可以访问所有其他属性作为 getter 方法。

if user.role == 0
   #do something
else
   #do something
end

最后你可以做一个user.save来保存所有的模型值。这样,下次您就可以访问角色属性了。

于 2013-11-05T16:10:23.293 回答
0

由于role是一个新User对象,您不想测试role == 0.

如果要根据传递的参数设置角色,请使用if params[:role]. 要修改User对象的角色,请使用role.role=.

如果您命名该对象usernew_user因为role它只是User.

if params[:role]
  role.role = 0
else
  role.role = 1
end
于 2013-11-04T08:19:40.177 回答
0

嗨,虽然我不确定,但您似乎没有按照您必须拥有的方式使用强参数,您似乎没有在允许的参数列表中添加 :role,这就是为什么您要承受手动测试价值的所有痛苦参数 [:role]。最好在允许的参数列表中添加 :role。
阅读此链接:- http://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters.html

于 2013-11-04T08:46:22.523 回答