首页 > 解决方案 > 使用 rails 形式的参数

问题描述

我实际上是一名学生,我正在做一个大致完成的小项目,除了我被一个显示活动的表格所困。每次用户选择一个活动时,我希望该活动已经填满,但实际上,它总是被表单提供的第一个活动锁定(只有 Url 很好,但表单上没有任何事情发生)。

如果它是以“好的方式”写的,我不会,但我的表格是这样的 (_form.html.erb) :

<%= form_with(model: activity, local: true) do |form| %>
     <% if activity.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(activity.errors.count, "error") %> prohibited this activity from being saved:</h2>
      <ul>
        <% activity.errors.full_messages.each do |message| %>
          <li><%= message %></li>
        <% end %>
      </ul>
    </div>
  <% end %>



  <div class="form-group">
  <%= form.label :activities, class:'activity_title' %>
  <%= form.select :activities, options_for_select(['Running', 'Fitness', 'Rugby', 'Crossfit', 'Track&Field', 'Walk', 'Volleyball', 'Football', 'Basketball', 'Swimming', 'Dancing','Handball']),  {:params => @activity.activities},  class: 'form-control'  %>
</div>

  <div class="field">
    <%= form.label :duration , class:'duration_title' %>
    <%= form.number_field :duration %>
  </div>

  <div class="fielddate">
    <%= form.label :date , class:'date_title' %>
    <%= form.datetime_select :date %>
  </div>

我对这个参数有很大的疑问,尤其是 {:params => @activity.activities}:

  <div class="form-group">
  <%= form.label :activities, class:'activity_title' %>
  <%= form.select :activities, options_for_select(['Running', 'Fitness', 'Rugby', 'Crossfit', 'Track&Field', 'Walk', 'Volleyball', 'Football', 'Basketball', 'Swimming', 'Dancing','Handball']),  {:params => @activity.activities},  class: 'form-control'  %>
</div>

活动控制器.rb:

class ActivitiesController < ApplicationController
  before_action :set_activity, only: [:show, :edit, :update, :destroy]
  before_action :authenticate_user! 

  # GET /activities
  # GET /activities.json
  def index
    @activities = current_user.activities
  end

  # GET /activities/1
  # GET /activities/1.json
  def show
  end

  # GET /activities/new
  def new
  
    @activity = Activity.new(:activities => params[:activities])
    puts @activity.activities

  end

  # GET /activities/1/edit
  def edit
  end

  # POST /activities
  # POST /activities.json
  def create
    @activity = Activity.new(activity_params)
    @activity.user = current_user
    respond_to do |format|
      if @activity.save
        format.html { redirect_to activities_url, notice: 'Activity was successfully created.' }
        format.json { render :show, status: :created, location: @activity }
      else
        format.html { render :new }
        format.json { render json: @activity.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /activities/1
  # PATCH/PUT /activities/1.json
  def update
    respond_to do |format|
      if @activity.update(activity_params)
        format.html { redirect_to activities_url, notice: 'Activity was successfully updated.' }
        format.json { render :show, status: :ok, location: @activity }
      else
        format.html { render :edit }
        format.json { render json: @activity.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /activities/1
  # DELETE /activities/1.json
  def destroy
    @activity.destroy
    respond_to do |format|
      format.html { redirect_to activities_url, notice: 'Activity was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_activity
      @activity = Activity.find(params[:id])
    end

    # Only allow a list of trusted parameters through.
    def activity_params
      params.require(:activity).permit(:activities, :duration, :date)
    end
end

在此处输入图像描述

如果您有任何解决方案可以分享,我将非常高兴!谢谢您的帮助。

标签: ruby-on-rails

解决方案


好吧,我自己找到了解决方案,有必要删除所有活动名称并将其替换为@activity.activities

   <div class="form-group">
  <%= form.label :activities, class:'activity_title' %>
  <%= form.select :activities, options_for_select([ @activity.activities ])  %>
</div>

推荐阅读