• 締切済み

rubyにてデータが変更されているかチェックしたいのですが

現在Ruby on Railsでプログラムを作成していますが、よくわかりません。周りに聞ける人もいないので、よろしければどなたか教えてください。 ユーザーファイルのパスワードが変更されていたら changepassdateの内容を変更して、 変更されていなかったらchangepassdateの内容はそのままにするという内容のプログラムを作りたいです。 現在の内容だと、パスワードを変更しないでもchangepassdateの内容が変わってしまいます。 どうしたらこの問題が解決されるでしょうか? お手数おかけして申し訳ありませんが、どなたか教えてください。お願いします。 def update @user = User.find(params[:id]) if @user.password =! params[:password] t = DateTime.now @user.changepassdate = t + 1 end respond_to do |format| if @user.update_attributes(params[:user]) flash[:notice] = 'ユーザー情報が更新されました。' format.html { redirect_to(@user) } format.xml { head :ok } else format.html { render :action => "edit" } format.xml { render :xml => @user.errors, :status => :unprocessable_entity } end end end

  • Ruby
  • 回答数1
  • ありがとう数6

みんなの回答

  • notnot
  • ベストアンサー率47% (4847/10260)
回答No.1

局所的にしか見ていませんが、 >if @user.password =! params[:password] は、 params[:password]はnil/falseで無いでしょうから、 その否定 !params[:password] はfalseになります。 つまり、 @user.password = false if false と同じです。 if @user.password != params[:password] の書き間違いでしょうね。

nanasejp
質問者

お礼

ありがとうございます!無事解決できました。

関連するQ&A

  • Rubyのパスワード変更画面について

    rubyでのプログラム作成についての質問です。 パスワードの変更画面を作成したいのですが、作り方がよくわかりません。 会社でrubyを使用したプログラム作成を命じられましたが、社内にrubyを使用できる人がいないので質問できず困っています。 パスワードを変更する際に、パスワードの入力と確認用パスワードの入力をして、 双方が一致したらパスワードを変更、双方が不一致ならエラーメッセージを表示するようにしたいのですが、どうしたらいいのでしょうか。 現在、コントローラ内は以下のようになっています。 def new @user = User.new respond_to do |format| format.html # new.html.erb format.xml { render :xml => @user } end end def create @user = User.new(params[:user]) if(params[:password]!=params[:password_confirm]) ←ここでパスワードと確認用パスワードをチェック? flash[:notice] = 'パスワードが間違っています。' redirect_to:back return end respond_to do |format| if @user.save flash[:notice] = 'User was successfully created.' format.html { redirect_to(@user) } format.xml { render :xml => @user, :status => :created, :location => @user } else format.html { render :action => "new" } format.xml { render :xml => @user.errors, :status => :unprocessable_entity } end end end パスワードチェックをしているつもりはあるのですが、パスワードと確認用パスワードが違っていても現在は登録処理がされてしまいます。どうしたらいいのでしょうか。 大変困っているのでどなたか教えてください。

  • パスワードを変更する方法について

    [関心事と希望] 非連結ファイル「テーブル」からコーティングのパスワード部分だけを変更することは可能でしょうか。可能でしたら是非チャレンジしたいと思っています。不十分な質問内容かと思いますが、ご査収いただければ幸いです。宜しくお願いします。 「コーティング内容」 Private Sub LogIn_Click() If Me.PASSWORD = "○○○○" Then DoCmd.OpenForm "○○○○" DoCmd.Close acForm, "F_パスワード" Else MsgBox "パスワードが違います!", vbCritical, "警告" End If End Sub 「対象ファイル数」 パスワードファイルは「F_パスワード ~ F_パスワード9」の全10ファイルです。 ご紹介頂いたサイト「修正あり」 http://www.access-vba-navi.com/post-548/ 宜しくお願いします。

  • Rails コンボボックスの値の保持について(select_tag,c

    Rails コンボボックスの値の保持について(select_tag,collection_select) こんにちは。 Ruby on Railsで簡単な一覧検索画面を作成中の者です。 検索時の検索条件にコンボボックスを使用しており、検索後にコンボボックスの値を保持したいのですが、どうしてもできません。 どなたかお分かりの方がおられましたらご教授いただけないでしょうか。 下記、作成中のソースです。 Viewの検索条件部 <%- form_tag({:action => "search"},{:method=> "GET"}) do -%> <th class="U" align="left" width="10%"><label for="userNm">ユーザー名</label></th> <td width="90%"><%= text_field_tag :userNm, @userNm %></td>  <th class="U" align="left" width="10%"><label for="authCd">社員権限</label></th> <td width="90%">  <%= collection_select(:auth, :authCd, Auth.find(:all, :order => "AUTH_CD"), :id, :AUTH_NM, :include_blank => true) %>  <td align="center"><%= submit_tag '検索' %></td> Controllerクラス: def search #画面パラメータから検索条件を作成 c = Condition.new # ユーザー名 userNm = "" if params[:userNm] userNm = params[:userNm] c.and "USER_NM", "LIKE", "%#{userNm}%" end # コンボボックスの値を取得 if params[:auth] && !params[:auth]["authCd"].blank? c.and "AUTH_CD", params[:auth]["authCd"] end # 検索処理 @users = User.paginate(:order => "USER_ID asc", :per_page => 5, :page => params[:page], :conditions => c.where) # 検索条件保持 @userNm = params[:userNm] # コンボボックスの値が保持できない if params[:auth] @auth_authCd = params[:auth]["authCd"] end respond_to do |format| format.html # index.html.erb format.xml { render :xml => @users } end end 見づらくて申し訳ありませんが、ざっと上記のようになっています。 もう1つの検索条件であるユーザー名(userNm)は保持できるのですが、コンボボックス(社員権限)の値が保持できません。 select_tagや、selectも使ってみたのですが、どちらも同じ結果でした。 コンボボックスの条件は、Authモデルから値を読込み、一番上は空白にする。というものです。 どのように記述すれば保持できるのか色々調べてみたのですが、結局分からず仕舞いでした。。 どうぞ宜しくお願い致します。

    • ベストアンサー
    • Ruby
  • VB2005のコードの書き方

    プログラミングの超初心者なので、基本的すぎることかもしれませんが、どうしても自分では解決できないので教えてください!! 「oldDataSet」の「TM_USER」テーブルにある「PASSWORD」フィールドのデータを更新するプログラムを作りたいと思っています。 「oldDataSet」の「TM_USER」テーブルにある「USER_ID」と「newDataSet」の「T_newpass」テーブルにある「userID」のデータは同じものなので、それをキーにして、「PASSWORD」のデータを「newDataSet」の「T_newpass」テーブルにある「newpass」のデータに更新しようと以下のようなコードを書いてみたのですが、 一行目しか更新されず、二行目以下は元のパスワードのまま終了してしまいます。 どのように書いたら最後まで更新できるのでしょうか? どなたか教えてください。よろしくお願いします。 ---------------------------------------------------------------- For j = 0 To oldDataSet.TM_USER.Rows.Count - 1 For i = 0 To newDataSet.T_newpass.Rows.Count - 1 If oldDataSet.TM_USER.Rows(TM_USERDataGridView.CurrentRow.Index)("USER_ID") = newDataSet.T_newpass.Rows(i)("userID") Then oldDataSet.TM_USER.Rows(TM_USERDataGridView.CurrentRow.Index)("PASSWORD") = newDataSet.T_newpass.Rows(i)("newpass")   End If Next Next MsgBox("終了") ----------------------------------------------------------------

  • Rubyでの条件分岐について

    登録フォームについての質問です。 ログイン用フォームのhome.cgi と、それにリンクするユーザー登録用フォームのregistration.cgi があり、今回質問するのはユーザー登録用のregistration.cgiの方です。そしてユーザーIDとPasswordはdata.txtに書き込んでいます。書き込み自体は成功するのですが、それ以外のところで問題がでている状態です。条件分岐がうまくいきません。 下記のように書いた時におこる問題点等について教えていただきたいと思います。 (1)IDとPassword のinput に値が空の時に、ボタンを押しても、登録完了しました と表示されてしまうので、この様な場合は、"もういちど確認してください" などの警告文を出したいです。 (2)IDとPassword の文字数に制限を入れたいのですが、分かりませんでした。 双方とも4文字以上8文字以下にしたいです。それ以外の場合は、条件分岐で、"文字数を確認してください"などの警告文を出したいです。 -------- < ここから registration.cgi >-------------------- #!/usr/bin/ruby require "cgi" cgi = CGI.new puts <<HTML Content-Type: text/html <html> <head> <title>練習問題</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <h1>練習(1)</h1> 登録フォーム <form action="registration.cgi" method="post"> ユーザーID:<input type="text" name="login" ><br> パスワード:<input type="text" name="password"><br> <input type="submit" value="submit"> </form> HTML if cgi.params["login"][0] then f = open("data.txt","a") f.puts"%s:%s" %[cgi.params["login"][0],cgi.params["password"][0]] f.close puts "登録完了しました" else end puts <<HTML <br> <a href="./home.cgi">戻る</a> HTML -------- < ここまで >--------------------

    • ベストアンサー
    • Ruby
  • パスワードをsqlスクリプトで変更する

    agusupです。 SQLServerパスワードをsqlスクリプトで変更する方法を教えてください。 :::::::::::::::::::::::::以下sqlスクリプトで記述します。 USE [common] GO /****** 変数の宣言    ******/ declare @PASSWORD as char(25) /****** テーブルのパスワードを変数に取込む ******/ SELECT @PASSWORD = [password] FROM [common].[dbo].[users_pass] where [ID] = 'testuser' /****** testuserのパスワードを変数@PASSWORDに変更する ******/ ALTER LOGIN [testuser] WITH password = @PASSWORD GO 以上。 この内容でユーザのパスワードを変更できると思ったのですが、 ALTER LOGINを実行すると'@PASSWORD' 付近に不適切な構文があります。というエラーメッセージが発生します。 因みに以下の内容を実行すると正常終了します。 USE [master] GO ALTER LOGIN [testuser] WITH password = 'mylogin' GO これらのことからpassword = 変数@PASSWORDをどのようにしたら実行できるのか教授願います。 宜しくお願いします

  • パスワード変更時について

    ユーザーIDとパスワードの情報を入力したのものがDBにあります。 ------------------- テーブル:accounts name ユーザーID password パスワード ------------------- ■やりたいこと 1)ユーザーにパスワードを変更させるときに、[ユーザーID]、[変更前のパスワード][変更後のパスワード]を入力させます。 2)入力された[変更前のパスワード]とDBのパスワードが一致すれば[ユーザーID]の列のパスワードを[変更後のパスワード]に変更する。

    • ベストアンサー
    • PHP
  • rails3初心者 複数の絞込検索

    絞り込み条件で、メーカーやカテゴリを選択してから 金額指定があれば、金額指定も含めて検索結果を実装する事はできますか? またボタンは1個にする形にしたいです。 よろしくお願い致しますm(_ _)m 絞込み検索内容 ========== ・メーカー (チェックボックス式) ・カテゴリ (チェックボックス式) ・金額指定 ========== ==================== views: ==================== <p>条件検索(複数選択可)</p> <%= form_tag ({:controller => :products, :action => :check }), {:method => :get} do %> <p>メーカーから探す</p> <% Maker.all.each do |maker|%> <%= check_box_tag "maker_id[]", maker.id, (params[:maker_id].include?(maker.id.to_s) if params[:maker_id]) %> <%= maker.maker_name %><br /> <% end %> <p>カテゴリから探す</p> <% Category.all.each do |c| %> <%= check_box_tag "category_id[]", c.id, (params[:category_id].include?(c.id.to_s) if params[:category_id]) %> <%= c.name %><br /> <% end %><br /> <%= submit_tag "検索"%> #このボタンを外してひとつのボタンにしたいです。 <% end %> <p>金額を指定して絞り込む</p> <%= form_tag ({:controller => :products, :action => :search_price }), {:method => :post} do %>  <%= text_field_tag "price1",(params[:price1] if params[:price1]) %> ~   <%= text_field_tag "price2",(params[:price2] if params[:price2]) %> <%= submit_tag "検索"%> <% end %> ==================== products_controller.rb ==================== def check @product = Product.all if params[:maker_id] && params[:category_id]   # 両方選択された場合 @products = Product.where(:category_id => params[:category_id], :maker_id => params[:maker_id] ) elsif params[:maker_id]   #makerが選択された場合 @products = Product.where(:maker_id => params[:maker_id]) if params[:maker_id] elsif params[:category_id]   #カテゴリが選択された場合 @products = Product.where(:category_id => params[:category_id]) if params[:category_id] elsif params[:maker_id] == nil && params[:category_id] == nil   #両方ともチェックがなかった場合 @products = Product.all end render :action => 'check' end def search_price @products = Product.where('price >=? AND price <=?', params[:price1],params[:price2]) @products = Product.where('price >=?', params[:price1]) if params[:price2].blank? @products = Product.where('price <=?', params[:price2]) if params[:price1].blank? render :action => 'index' end ややこしくてすみません^^; どうぞよろしくお願い致します。

    • ベストアンサー
    • Ruby
  • どこが間違いか分かりません。(Ruby)

    Rubyを使ったプログラムが巧く行かないのですが、どこでエラーが出ているのか分かりません。どなたか何が原因でエラーが起こったのか教えて頂けないでしょうか。 以下ソースコードです。 class SolitaireCipher $deck = (1..52).to_a+['A','B'] def solitaire(count) key_stream = [] until key_stream.size == count a = $deck.index("A") $deck.delete("A") if a == 53 a = 0 else a += 1 end $deck.insert(a,"A") b = $deck.index("B") $deck.delete("B") if b == 52 b = 1 elsif b == 53 b = 2 else b = b+2 end $deck.insert(b,"B") a1 = $deck[0..b-1] a2 = $deck[b..a] a3 = $deck[a+1..53] $deck = a3+a2+a1 if $deck[53] == 'A' t1 = 27 elsif $deck[53] == 'B' t1 = 27 else t1 = $deck[53] end a4 = $deck[0..t1-1] $deck = ($deck-a4).insert(52,a4).flatten! i = $deck[0].to_i key = $deck[i] key_stream << key end key_stream_s = key_stream.join n = 5 while n < key_stream_s.size key_stream_s[n,0] = " " n += 6 end key_stream = key_stream_s.split(" ") end end s = SolitaireCipher.new p s.solitaire(20) このプログラムを実行したときに、どういう訳かuntil文の中で毎回$deckの値が初期化されるようです。 そのため結果が以下のようになります。 ["44444", "44444", "44444", "44444"] 初心者プログラマーなので何か初歩的な間違いをしているのかもしれません。 どなたかエラーの原因を教えて頂けないでしょうか。 読みにくいプログラムではありますがよろしくおねがいします。

  • パスワード変更

    お世話になります。 OS:solaris9 パスワード管理上、定期的にユーザのパスワードの変更を実施しようと思うのですが、passwdコマンドで数十件のユーザを毎月変更するのは手間なので、shで修正できれば と考えています。 しかしshで修正するとnew-passwordとre-passwordのプロンプトが出力される為、そこで処理がとまります。 何とかsh内部でプロンプトへ自動入力できる様にならないのでしょうか?

専門家に質問してみよう