要求:我需要在ROR中创建单个页面应用程序,用户可以在其中更改页面,字体的背景颜色,并且该更改应该与用户会话保持一致。
我正在做的是:我创建了一个带有home作为索引的控制器static_pages,并在其视图下创建了一个名为home.html.erb的表单。
<%= form_for @user, :url => url_for(:controller => 'static_pages', :action => 'home') do |u| %>
<br >
<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>
<select name="bgcolor" id="bgcolor">
<option value="#FF3300">Orange</option>
<option value="#00FF00">Green</option>
<option value="#0000FF">Blue</option>
<option value="#FF0066">Pink</option>
<option value="#FFFF00">Yellow</option>
<option value="#FFFFFF">White</option>
</select>
</p>
<p>
<%= u.label :font %><br>
<select name="font" id="font">
<option value="Times New Roman">Times new Roman</option>
<option value="Verdana">Verdana</option>
<option value="Arial">Arial</option>
<option value="sans-serif">serif</option>
</select>
</p>
<br >
<p>
<%= u.submit %>
</p>
<hr >
<div style="background-color:#{current_user.font.nil? ? '#FFFFFF' : current_user.font}">
This is the changes made in background
</div>
<div style="background-color:#{current_user.bgcolor.nil? ? '#FFFFFF' : current_user.bgcolor}">
</div>
<% end %>
我为当前登录应用程序的用户创建了此表单,并且我已经使用了devise gem.Now如果用户填写此表单并提交它必须更改页面的背景颜色,我试图将其保存在用户数据库。用户的架构如下:
create_table "users", force: :cascade do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
t.datetime "created_at"
t.datetime "updated_at"
t.text "title"
t.string "bgcolor"
t.text "description"
t.text "font"
end
我在控制器中将此数据作为static_pages_controller.rb
处理class StaticPagesController < ApplicationController
def home
@user = User.new(params.require(:user).permit(:title, :description, :font, :bgcolor))
if @user.save
redirect_to '/static_pages/home'
else
flash[:notice] = "Developers to be blamed !!"
end
end
end
当我提交此表单时,我收到如下错误:
param is missing or the value is empty: user
注意:routes.rb看起来像这样
devise_for :users, controllers: { registrations: "users/registrations" }
devise_scope :user do
authenticated :user do
root :to => 'static_pages#home', as: :authenticated_root
end
unauthenticated :user do
root :to => 'devise/registrations#new', as: :unauthenticated_root
end
end
请指导我做错的地方!并提前感谢
答案 0 :(得分:-1)
尝试重定向到root_path
而不是'/static_pages/home'
您可能会遇到另外一个问题:@user.save
会尝试保存新用户,而不是更新现有用户。
还要考虑隐式渲染视图,而不是显式重定向回同一路径。这样,整个if / else块可以简化为:flash[:notice] = "Developers to be blamed !!" unless @user.save
进一步说明:单页应用程序主要在客户端上呈现。控制器仍应根据REST原则进行设计。