2013-11-04 78 views
0

我想從複選框中獲取參數並修改值。 因此,如果複選框被選中的值應該是在模型1,否則爲0Ruby on Rails - 獲取複選框參數並更改值

每次當我檢查模型,可以說的對我說:

#<User id: 1, name: "admin", email: "[email protected]", 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> 
+0

當您檢查複選框時,然後在控制器中打印參數複選框並更新。 – Debadatt

回答

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 
+0

嗯......我不知道你的意思..你能舉個例子嗎? – ciaodarwin

+0

@ciaodarwin更新了示例,但請不要將其用作解決方案。重命名'角色' –

0

嗨,雖然我不知道,但似乎你不使用強大的參數,你必須有辦法似乎你還沒有加入:在您的允許參數列表的作用,這就是爲什麼要負擔全部這種手動測試params [:role]值的痛苦。在你允許的參數列表中更好地添加:角色。
閱讀本鏈接: - http://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters.html

+0

是的,但也閱讀由Musannif評論。 Becaue您正在以錯誤的方式使用模型對象 – Akshat

0

我認爲你與用戶對象和角色混淆。由於您是通過新方法創建用戶對象,因此必須使用點方法訪問屬性。

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

這給出了一個用戶對象。現在,您可以訪問所有其他屬性作爲getter方法。

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

最後,你可以做一個user.save保存所有的模型值。由此,下次您可以訪問角色屬性。