我试图从用户那里获取表单的背景颜色,并将值存储在user_preference表中,并通过从表中获取相同的表单来应用这些背景颜色。
我的表单如下:
<%= 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
这是正确的做法吗? 让我知道我在哪里做错了,任何帮助将不胜感激。
答案 0 :(得分:2)
如果你想获取最后一个数据并根据它改变背景颜色,那么你必须在渲染新形式时传递对象:
更改控制器的新方法(编辑:UserPreference中的FIXED错误):
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
返回nil
,您将看到默认表单的背景颜色。
如果你想在选择颜色的同时用户可以在提交数据之前预览,那么我已经实现了示例演示。选中 Working Demo
答案 1 :(得分:1)
要获取上次保存的背景,您需要先找到记录。在您的控制器中:
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添加到表单中以获得更多可用性。