Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在窗体的控制器中设置参数值时出错_Ruby On Rails_Ruby_Forms_Params - Fatal编程技术网

Ruby on rails 在窗体的控制器中设置参数值时出错

Ruby on rails 在窗体的控制器中设置参数值时出错,ruby-on-rails,ruby,forms,params,Ruby On Rails,Ruby,Forms,Params,我有一个表单,允许用户将新的阻止电视节目添加到他们的阻止节目列表中。表单未采用我试图在控制器中设置的参数值(:user_id,:title,:image)。我是初学者,所以我猜语法是个问题 另外,在尝试使用@Tvshow实例变量设置:title和:image的参数值时,我发现找不到没有Id的Tvshow错误。每个被阻止的节目应具有与用户在集合中选择的电视节目相同的标题和图像。有没有更简单的方法 看法 您之所以会遇到此问题,是因为未传递参数[:blockedshow][:id],如果您试图访问从下

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

另外,在尝试使用@Tvshow实例变量设置
:title
:image
的参数值时,我发现
找不到没有Id的Tvshow
错误。每个被阻止的节目应具有与用户在
集合中选择的电视节目相同的标题和图像。有没有更简单的方法

看法


您之所以会遇到此问题,是因为未传递参数[:blockedshow][:id],如果您试图访问从下拉列表中选择的Tvshow id,则可以执行以下操作

@tvshow=tvshow.find参数[:blockedshow][:tvshow\u id]


仅通过将控制器更改为以下方式进行修复:

 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
    )

谢谢你的回复。我的
:tvshow\u id
输入工作正常,但是
:user\u id
:title
,和
:image
在数据库中仍然显示为空。您可以在调用safe\u blockedshow()之前合并参数!(用户标识:当前用户标识,标题:@tvshow.title,图像:@tvshow.image)
@blockedshow=blockedshow.new(安全的blockedshow)
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
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]'
 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
    )