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
)