2017-01-08 12 views
1

私は少しフォームを作っています。私がしようとしているのは、通知が作成されたときだけ、テキストフィールドの1つに値を取得させることです。私は:Rails:テキストフィールドを編集できるのは1回だけですか?

<%= f.label :User_ID %> 
<%= f.text_field :user_id, :value => current_user.id ,:readonly => true %> 

私の問題は、他のユーザーが通知を編集している場合、このテキストフィールドは自動的にその値を変更していることです。私はそれを動作させる方法がわかりません。ありがとう!

ユーザーIDがすでに存在しているかどうかを確認でき、その場合、ユーザID text_fieldは表示されませんあなたのビューで
+0

編集のためにブール値を追加し、一度更新した後にfalseに変更します。モデルにbefore_updateフィルタを作成して、そのフィールドの変更をブロックします。 –

+0

この例では、クライアントがcurrent_user idを好きなように変更できます(devツールを開いてidを編集するだけです)。クライアントを信頼しないでください –

+0

@AlexanderLuna編集のためにブール値を追加することはどういう意味ですか? – RIP

答えて

1

<% unless user_id.exists? %> #only if user_id is not present, show the text_field 
<%= f.text_field :user_id, :value => current_user.id ,:readonly => true %> 
<% end %> 

別のオプションは、モデルにあなたをブール値を追加することです言及している。例えば、通知モデル:

通知:文字列 編集:ブール(デフォルト:真)ユーザーが通知を作成した後

は、あなたが後のために作成してfalseに「編集」のブール値を設定します例。

ユーザがその通知を編集次回は、あなたが以前のようにビューで同じ操作を行います。

<% unless @notification.edit? %> #only if edit is set to true, show the text_field 
<%= f.text_field :user_id, :value => current_user.id ,:readonly => true %> 
<% end %> 

それは少し曖昧ですが、それはあなたにそれを行うにはどのようにアイデアを提供します。

+0

ありがとう!第二の方法は私にとって完璧です。私がこのコードでしなければならなかったのは、逆の効果を得ていたからである。もう一度ありがとう! – RIP

+0

あなたは歓迎です –

関連する問題