如何从数据库中获取属性值并应用于表单

How to fetch attribute value from database and apply to form

我正在尝试从用户那里获取表单的背景色并将值存储在 user_preference table 中,然后通过从 table 获取数据来应用这些背景色变成相同的形式。

我的表单如下所示:

<%= form_for @user_preference do |u|%>
 <p>
    <%= u.label :title %><br>
    <%= u.text_field :title %>
  </p>

  <p>
    <%= u.label :description %><br>
    <%= u.text_field :description %>
  </p>

  <p> <%= u.label :back_ground_color %><br>
    <%= u.select :bgcolor, options_for_select(UserPreference.bgcolor_options) %>
  </p>

  <p>
    <%= u.label :font %><br>
    <%= u.select :font, options_for_select(UserPreference.font_options) %>

  </p>

 <br >
  <p>
    <%= u.submit %>
  </p>
  <div style="<%= 'background-color:#{@user_preference.bgcolor};' %>"</style></div>
  <hr >
<% end %>

我在将值保存到数据库后再次呈现此表单,是否应该这样做?

这是我的控制器:

class UserPreferencesController < ApplicationController
    def new
        @user_preference = UserPreference.new
    end

    def create
        @user_preference = UserPreference.new(user_pref_params)
        @user_preference.user = current_user
        @user_preference.save if user_signed_in?
        render 'user_preferences/new'
    end

这是正确的做法吗... 让我知道我在哪里做错了,我们将不胜感激。

要获取上次保存的背景,您需要先找到该记录。在您的控制器中:

 def new
        @user_preference = UserPreference.new
        # Find the last record 
        @last_preference = UserPrefrence.find(insert_your_params_here)
 end

并更新您的观点:

<div style="<%= 'background-color:#{@last_preference.bgcolor};' %>"</style></div>

之后,您可以决定将 this script 添加到您的表单中以提高可用性。

如果您想获取最后的数据并根据它更改背景颜色,那么您必须在呈现新表单时传递对象:

更改控制器的新方法(编辑:修复了 UserPreference 中的拼写错误):

def new
  @user_preference = UserPreference.new
  @last_bgcolor = UserPreference.last.bgcolor #this will fetch the last data and return last bgcolor entered
 end

要将该背景色应用于表单,只需在上面的模板中添加 div 标签 form_for

<div style="background-color:<%= @last_bgcolor %>"> 
 <%= form_for @user_preference do |u|%>
  .....
  #your form code
 <% end %>
</div>  #close the div after your form_for closed by <% end %>

@last_bgcolor returns nil 的情况下,您将看到默认表单的背景颜色。

如果您希望用户在选择颜色时可以在提交数据之前进行预览,那么我已经实现了示例演示。检查这个 Working Demo