Ruby On Rails:使文本字段不可编辑,并在编辑记录时显示另一个字段

时间:2013-02-12 10:21:18

标签: ruby-on-rails field

1.如何在编辑记录

时使文本字段不可编辑(可读= false)

我的表单查看代码

  <div class="field">
    <%= f.label t :profile_name %><br />
    <%= f.text_field :profile_name %>
  </div>

2.如何在编辑记录时使字段可见。我在数据库表中有一个字段,我只想在编辑记录时显示以填充,同时创建一个不可见字段的新记录。

解决:

永远不要介意我得到了解决方案,

1. 
<div class="field">
  <%= f.label t :profile_name %><br />
  <%= f.text_field :profile_name, :readonly => f.object.persisted? %>
</div>

2. 
<% if f.object.persisted?%>
  <div class="field">
    <%= f.label t :another_field %><br />
    <%= f.text_field :another_field%>
  </div>
<% end %>

2 个答案:

答案 0 :(得分:6)

如果您希望文本框不可编辑,可以使用小css或前端,如下所示:

 <div class="field">
    <%= f.label t :profile_name %><br />
    <%= f.text_field :profile_name, disabled: disabled %>
 </div>

或添加:readonly => true而不是disabled。所以,

<div class="field">
    <%= f.label t :profile_name %><br />
    <%= f.text_field :profile_name, readonly: true %>
 </div>

在视图中添加已禁用,以生成不可编辑的文本框。如果它不起作用我们也可以用css。请告诉我它是否有效。

答案 1 :(得分:1)

回答那些发现这一点的人。我的问题非常接近。我有一个我想要显示的字段,但没有可编辑的字段。我正在使用设计,只允许通过设计视图设置电子邮件和密码。

1)禁止在表单中进行编辑(此步骤提供零安全性):

<%= f.text_field :email, readonly: true %> 

2)客户防止恶作剧(此步骤是实际保护):

    # Never trust parameters from the scary internet, only allow the white list through.
    def user_params
      # params.require(:user).permit(:email, :phone_number, :password, :password_confirmation)
      # email and password must be edited via devise controller
      params.require(:user).permit(:phone_number)
    end

2b)或者,您可以从编辑集中删除值:

def update
  params['user'].delete('email')
  ...
end