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

时间:2015-04-23 10:01:29

标签: css ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4

我试图从用户那里获取表单的背景颜色,并将值存储在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

这是正确的做法吗? 让我知道我在哪里做错了,任何帮助将不胜感激。

2 个答案:

答案 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添加到表单中以获得更多可用性。