如何从数据库中获取属性值并应用于表单
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
我正在尝试从用户那里获取表单的背景色并将值存储在 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