0

Я новичок в Rails (и веб-разработке в целом). Я искал учебники по Rails, которые могут помочь мне пройти через проект. Я нашел решение практически для всего моего вопроса, но все еще остается.Rails: Учебные пособия о том, как разрешить пользователям персонализировать свои таблицы стилей

Как следует из названия, я хочу, чтобы пользователи моего сайта могли персонализировать свои таблицы стилей CSS для своего личного пространства. Twitter нравится.

Может ли кто-нибудь мне помочь? Это было бы беспорядочно.

Спасибо!

EDIT:

Хорошо, так вот мой код до сих пор (я использую Завещание)

#stylesheets_controller.rb 
class StylesheetsController < ApplicationController 

    def user_css 
    if user_signed_in? 
    @user = current_user 
    end 

    respond_to do |format| 
    format.css 
    end 
end 

end 

Мой "динамический" CSS:

#user_css.css.erb 
<%= 
    if @user # User log in ? 
    background_color = @user.color_index 
    else 
    background_color = "666" 
    end 
%> 

.cadre { 
    background-color : #<%= background_color %>; 
    height: 50 px; 
    width: 50 px; 
} 

Можете ли вы сказать мне, что Я ошибаюсь, потому что у меня есть эта ошибка и не могу загрузить мой CSS:

работы GET "/stylesheets/user_css.css" для 127.0.0.1 в 2011-04-18 15:09:07 +0200

Обработка по StylesheetsController # user_css, как HTML

← [1m ← [36mUser нагрузки (2.0ms) ← [0й ← [1mSELECT "пользователи". * FROM "пользователи", где ("пользователи". "ID" = 5) LIMIT 1 ← [ого

Завершенного 406 не приемлем в 127ms

Если вам нужен код из любого из моих файлов, пожалуйста, скажите мне.

+0

просто голова: будьте осторожны с инъекцией css и соответствующим дизайном. См. [This Rails Guides Atricle] (http://guides.rubyonrails.org/security.html#css-injection) для базового введения в CSS-инъекцию. – brettish

ответ

3

Может быть, вы могли бы попробовать создать контроллер таблиц стилей:

class StylesheetsController < ... 
    def per_user # or whatever name you like 
    @user = User.find(params[:id]) 

    respond_to do |format| 
     format.css # I didn't try it, but I guess this should work, please tell me if not 
    end 
    end 
end 

И это ваш шаблон: /app/views/stylesheets/per_user.css.erb

/* put whatever you want here */ 
#user-<%= @user.id %> { 
    color: #666; 
} 

<%= @user.user_defined_css %> 

И, наконец, по маршруту:

get '/stylesheets/per_user.css' => 'stylesheets#per_user', :as => :per_user_stylesheet 

<%= stylesheet_link_tag per_user_styleseet_path %> 

Я думаю, что стили не изменятся слишком часто. Таким образом, вы бы лучше кэшировать результат.

=== ОБНОВЛЕНО ===

я попытался выше код, он не работает также .......

Так что это еще один способ, которым я могу думать, сделав использование частичного.

В файле макета:

# views/layouts/application.html.erb 
...... 
<head> 
    <%= render :partial => "stylesheets/user_css", :locals => {:user => @user} %> 
</head> 
...... 

И ваш парциальное содержит настроенный CSS для пользователя.

Это может быть не очень красиво, но я думаю, что это должно сработать.

+0

Я обновил свой оригинальный пост, не могли бы вы взглянуть на него? Большое спасибо! – Lucas

+0

Ваше новое решение не работает: Отсутствуют частичные таблицы стилей/user_css с помощью {: handlers => [: erb,: rjs,: builder,: rhtml,: rxml],: formats => [: html],: locale => [: ru,: en]} в пути просмотра. Я переименовал свой «_user_css.css.erb», но он не загрузит его. Я попытался переименовать его в _user_css.html.erb, а затем он не дал ошибку (просто отображая содержимое). Любые способы сказать Rails, что он имеет дело с частичным CSS? – Lucas

+0

В этом случае вы должны называть его '_user_css.html.erb'. Обратите внимание на '_user_css', это всего лишь встроенный HTML-код для встраивания тега стиля. – PeterWong