Ruby on Rails - 获取复选框参数并更改值

时间:2013-11-04 07:27:53

标签: ruby-on-rails ruby params

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

3 个答案:

答案 0 :(得分: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

答案 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 来保存所有模型值。这样,下次您可以访问角色属性。