【问题标题】:Trouble setting param values in controller for form在控制器中为表单设置参数值时遇到问题
【发布时间】:2014-01-01 22:58:46
【问题描述】:

我有一个表单,可让用户将新的被屏蔽电视节目添加到他们被屏蔽的节目列表中。该表单未采用我尝试在控制器中设置的参数值(:user_id:title:image)。我是初学者,所以我猜语法是问题。

我在尝试使用@tvshow 实例变量设置:title:image 的参数值时也收到Couldn't find Tvshow without Id 错误。每个被阻止的节目都应与用户在collection_select 中选择的电视节目具有相同的标题和图像。有没有更简单的方法来做到这一点?

查看

<%= form_for @blockedshow do |b| %>
<%= b.label :tvshow_id, "Add a Blocked TV Show " %><br/>
<%= collection_select(:blockedshow, :tvshow_id, Tvshow.all, :id, :title, prompt: true) %>

<%= submit_tag 'Add' %>
<% end %>

控制器

class BlockedshowsController < ApplicationController
  def new
    @blockedshow = Blockedshow.new
  end


  def create
    @tvshow = Tvshow.find params[:blockedshow][:id]
    @blockedshow = Blockedshow.new(safe_blockedshow)
      params[:user_id] = current_user.id
      params[:title] = @tvshow.title
      params[:image] = @tvshow.image

    if @blockedshow.save
      flash[:notice] = "New Blocked TV Show added successfully"
      redirect_to tv_show_index_path
    else
      render 'new'
    end
  end
  private

  def safe_blockedshow
    params.require(:blockedshow).permit(:title, :user_id, :tvshow_id, :image)
  end
    end

Blockedshow 模型

class Blockedshow < ActiveRecord::Base
  has_many :phrases
  has_many :tvshows
  belongs_to :user
end

电视节目模特

class Tvshow < ActiveRecord::Base
    has_many :phrases
    belongs_to :blockedshow


    def self.search_for (query)
            where('title LIKE :query', query: "%#{query}%")
        end
end

路线

  resources :blockedshows

  post 'blockedshows', to:'blockedshows#create#[:id]'

【问题讨论】:

    标签: ruby-on-rails ruby forms params


    【解决方案1】:

    您遇到问题是因为 params[:blockedshow][:id] 未通过,如果您尝试访问从下拉列表中选择的 Tvshow id,您可以执行以下操作

    @tvshow = Tvshow.find 参数[:blockedshow][:tvshow_id]

    【讨论】:

    • 感谢您的回复。我的:tvshow_id 输入正常,但:user_id:title:image 在数据库中仍然显示为空白。
    • 你可以在调用safe_blockedshow()之前合并参数@tvshow = Tvshow.find params[:blockedshow][:id]params.merge!(user_id: current_user.id, title: @tvshow.title, image: @tvshow.image)@blockedshow = Blockedshow.new(safe_blockedshow)
    【解决方案2】:

    只是通过将控制器更改为这个来修复:

     def create
        @tvshow = Tvshow.find params[:blockedshow][:tvshow_id]
        @blockedshow = Blockedshow.new(
            :user_id =>current_user.id,
            :title=> @tvshow.title,
            :image=> @tvshow.image,
            :tvshow_id=>@tvshow.id
        )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-11
      • 1970-01-01
      • 2010-12-09
      • 2011-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多