Ruby on rails 从选择框中获取数据并将其传递到参数

Ruby on rails 从选择框中获取数据并将其传递到参数,ruby-on-rails,ruby,Ruby On Rails,Ruby,我这样做是为了一个学校项目,但它不起作用 如何从视图中取出所选的[petowner_id],并使其在ruby控制器中可用? 如何在从视图到函数的控制器中设置@selected_pet=params[petowner_id]?当前,当我尝试设置它时,它会呈现一条错误消息: 我对它不起作用感到非常厌倦 来自Pets控制器的控制器 class PetsController < ApplicationController # GET /pets # GET /pets.json de

我这样做是为了一个学校项目,但它不起作用 如何从视图中取出所选的[petowner_id],并使其在ruby控制器中可用? 如何在从视图到函数的控制器中设置@selected_pet=params[petowner_id]?当前,当我尝试设置它时,它会呈现一条错误消息: 我对它不起作用感到非常厌倦

来自Pets控制器的控制器

class PetsController < ApplicationController
  # GET /pets
  # GET /pets.json

  def monsters
    #Finds the current user
    if current_user
       @user = current_user
       @pets_kept = [] #why?
       #@petowner = Petowner.find(params[:petowner][:id])
       #if(params[:commit])
       #end
       @monster = "Eeeep"
       @mypets=[]
       @all_my_pets = @user.petowners
#options value = 2

#params { selected_petowner[petowner_id]}
       @selectpet = params{[selected][petowner_id]}
       @petowner = Petowner.find_by_id(params[:id])
       @pet = Pet.find_by_id(params[:pet_id])
       #Find the petowners that the user currently has
       #@mypets = @user.petowners

       #This is my way of doing things in a C++ fashion, I don't get all ruby things
       @user.petowners.each do |pet|
           #@selected_pet = pet.find(params[:selected])
       #   if pet.hp != 0
       #      @pets_kept << pet #Dont recall seeing the << before in ruby but for C++ statement used for cout statements
             #if pet.select
             #   @selected_pet = pet.select
             #end
          end
       #@selected_pet = Petowner.find(params[:petowner][:selected])
       #end
       @selected_pet = 1 #@user.petowners.find(params[:id])

       @mypets = current_user.petowners.select{|pet| pet.hp !=0}
       #raise "I am here"
       #@selected_pet = @mypets.find(params[:id][:selected])
       #@mypets = @pets_kept
    end
视图中不返回控制器变量并进行设置的代码:

<select id="petowner_id" name="selected[petowner_id]">
         <%= @all_my_pets.each do |pet| %>
            <option value="<%= pet.id %>"><%= pet.pet_name %></option>
         <% end %>
      </select>
“宠物/怪物”视图中的上一步在上一系列中根本不起作用:

<%= form_for :petowner, :url => petowner_fights_path(@selected_pet, @pet) do |f| %>

               <p>Select a pet <%#= f.collection_select(:petowner, :petowner_id, @user.petowners, :petowner_id, :pet_name) %></p>
               <%= render 'monsterinfo' %>

               <div class="outer"></div>
               <%= f.submit "Fight Selected Monster" %>
            <% end %>
您可能需要params[:petowner][:petowner\u id]。绝对不要在视图中使用html构造select


顺便说一句,看到所有参数都传递给控制器操作非常有帮助。我倾向于在需要时将params.to_yaml提升。

params{[selected][petowner_id]}是无效语法。我想您需要params[:petowner\u id]。好的,我尝试了这个语法@selectpet=params[:petowner][:id],但它不起作用。我得到了一个错误:PetsControllermonsters undefined方法中的NoMethodError[]'for nil:NilClass Rails.root:/home/eric/tobenamed.git/Trial Application Trace | Framework Trace | Full Trace app/controllers/pets_controller.rb:20:in monsters的请求参数:None Show session dump Show env dump Response Headers:NoneWell这不完全是我建议您尝试的;但是可以肯定的是,当错误发生时,您可以查看params散列的转储。我永远不会让选择框中的参数工作:我尝试了这个,它给了我一个愚蠢的错误信息:你养了情妇吗?这应该是一条错误消息。它会告诉你参数中包含了什么。我在第25层提升参数,但我得到了一个错误:PetsControllermonsters undefined方法中的NoMethodError[]'对于nil:NilClass参数:None Show session dump Show env dump Response Headers:None On ln 17当我发出消息时,我得到以下消息:PetsControllermonsters中的RuntimeError-!ruby/hash:ActiveSupport::HashWithUnderferenceAccess controller:pets操作:monsters Rails.root:/home/eric/tobenamed.git/Trial Application Trace | Framework Trace | Full Trace app/controller/pets|controller.rb:17:in monsters请求参数:NoneMake raise params.to|yaml控制器操作的第一行。反应如何?这应该是一条错误消息。