0

На моей странице создания новой статьи у меня есть выбор для разных вариантов. В зависимости от того, какой вариант пользователь выбирает, я хотел бы установить значение другого атрибута.Установка значения атрибута В ​​зависимости от выбора пользователя Rails 4

Не удалось найти лучший способ для этого. Я бы написал инструкцию if внутри нового представления? Или контроллер статьи?

вот мой new.html.erb:

<%= f.label "Rating" %><br> 
<%= f.select :rating, options_for_select(['A+','A','A-','B+','B','B-','C+','C','C-','D+','D','D-','F+','F','F-'], params[:rating]), {}, { :class => 'span3 controls controls-row' } %> 

<%= f.label "Rating color" %><br> 
<%= f.text_field :ratingcolor %> 

В частности, когда пользователь выбирает A +, A, A- или, я хотел бы, чтобы: ratingcolor автоматически присваивается зеленый цвет. Если B +, B или B-, тогда цвет желтый ... и т. Д.

Если есть документация по этому вопросу, можете ли вы указать мне именно так? Благодаря!

UPDATE

new.html.erb (упрощенная версия)

<div class="form-inputs"> 

    <%= simple_form_for(@article) do |f| %> 
    <%= f.error_notification %> 

    <select id="rating"> 
    <option value="A+">A+</option> 
    <option value="A">A</option> 
    <option value="A-">A-</option> 
    <option value="B+">B+</option> 
    <option value="B">B</option> 
    <option value="B-">B-</option> 
    <option value="C+">C+</option> 
    <option value="C">C</option> 
    <option value="C-">C-</option> 
    </select> 
    <label for="rating_color">Rating color</label> 
    <input id="rating_color" type="text" name="rating_color" /> 

    <% end %> 
</div> 

Поскольку я использую simple_form_for, я пытался что-то вроде этого

<%= f.label "Rating" %><br> 
<%= f.select :rating, options_for_select(['A+','A','A-','B+','B','B-','C+','C','C-','D+','D','D-','F+','F','F-'], params[:rating]), {}, :class => 'span3 controls controls-row', :input_html => { :id => "rating" } %> 

<%= f.label "Rating color" %><br> 
<%= f.text_field :ratingcolor, input_html => { :id => "rating_color" } %> 

Но это не Работа.

Вот мой articles_controller.rb

class ArticlesController < ApplicationController 
    before_action :set_article, only: [:show, :edit, :update, :destroy] 
    before_filter :authenticate_user!, except: [:index, :show] 

    def index 
    if params[:query].present? 
     @articles = Article.search(params[:query], misspellings: {edit_distance: 1}) 
    else 
     @articles = Article.all 
    end 

    if @articles.blank? 
     return redirect_to request_path 
    end 

    get_query 
    end 

    def show 
    @article = Article.find(params[:id]) 
    if request.path != article_path(@article) 
     redirect_to @article, status: :moved_permanently 
    else 
     respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @article } 
     end 
    end 
    end 

    def new 
    @article = current_user.articles.new 
    end 

    def edit 
    @article = current_user.articles.find(params[:id]) 
    end 

    def create 
    @article = current_user.articles.new(article_params) 
    respond_to do |format| 
     if @article.save 
     format.html { redirect_to @article, notice: 'Article was successfully created.' } 
     format.json { render :show, status: :created, location: @article } 
     else 
     format.html { render :new } 
     format.json { render json: @article.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    def update 
    @article = current_user.articles.find(params[:id]) 
    respond_to do |format| 
     if @article.update(article_params) 
     format.html { redirect_to @article, notice: 'Article was successfully updated.' } 
     format.json { render :show, status: :ok, location: @article } 
     else 
     format.html { render :edit } 
     format.json { render json: @article.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    def destroy 
    @article = current_user.articles.find(params[:id]) 
    @article.destroy 
    respond_to do |format| 
     format.html { redirect_to articles_url, notice: 'Article was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    private 

    def set_article 
     @article = Article.find(params[:id]) 
    end 

    def article_params 
     params.require(:article).permit(:isare, :name, :image1, :image2, :image3, :image4, :r1image, :r2image, :r3image, :r4image, :title, :aka, :category, :rating, :ratingcolor, :whyrating, :alternative1, :alternative2, :alternative3, :checkthisout, :nutritiontable, :sugarsdp, :facts, :video1, :video2, :related1, :related2, :related3, :related4, :sources) 
    end 

    def get_query 
     @userquery = params[:query] 
    end 
end 
+1

Звучит как 'Javascript'. Вы пытались сделать это с помощью 'jQuery'? Кроме того, вы имеете в виду, что вы хотите, чтобы': ratingcolor' был назначен строка «зеленый», «желтый» и т. д. –

+0

да точно, это будет строка. Является ли javascript лучшим способом для этого? – Kathan

+1

Да, я бы написал находится в 'jQuery'. Вы знакомы с ним? –

ответ

1

Вот Fiddle. В принципе, получите значение от select, а затем используйте его для установки значения в text field. Обратите внимание, что я использовал id=rating и id=rating_color как крючки, но вы можете изменить их по своему усмотрению (они только должны соответствовать между HTML и JavaScript.

Это все вместе, на ваш взгляд, или вы можете поместить JS в отдельном файле в app/assets/javascripts (лучше). Просто убедитесь, что вы указали в файле манифеста jQuery (я думаю, что это по умолчанию в Rails 4+).

+0

Не могу поблагодарить вас достаточно человека. Один вопрос, как мне получить атрибуты: rating и: ratingcolor? Когда я отправляю форму, значения не сохраняются, поэтому на странице просмотра ничего не отображается. Подойди ближе! – Kathan

+0

Вы хотите сказать, что у вас на контроллере? На ваш взгляд, вы используете помощника типа 'form_for', а затем отправляете в конце? Возможно, вы можете обновить сообщение своим полным видом (или, по крайней мере, формой), плюс ваш код контроллера. –

+0

Одна минута, обновится. Да simple_form_for с сообщением в конце – Kathan

Смежные вопросы