为模型实现 edit/update 功能时出现问题
Problem implementing edit/update functionality for model
当我尝试编辑 Job 模型的实例时,我尝试更新的属性设置为 Nil。
我试过使用常规的 form_for 帮助程序而不是 simple_form,因为我不知道 simple_form 是否需要额外的信息,例如要使用的操作和方法,但是没用。
edit.html.erb
<h1>Edit Job:</h1>
<br>
<%= simple_form_for @job do |f| %>
<%= f.input :title, label: "Job title" %>
<%= f.input :description, label: "Description" %>
<%= f.button :submit %>
<% end %>
jobs_controller.rb
def edit
@job = Job.find(params[:id])
end
def update
@job = Job.find(params[:id])
@job.update(title: params[:title], description: params[:description])
if @job.save
redirect_to jobs_path(@job)
else
render "edit"
end
end
routes.rb
resources :candidates
resources :tenants, constraints: { subdomain: 'www' }, except: :index
resources :jobs, path_names: { new: 'add' }
get 'candidates/index'
get 'candidates/new/:id' => 'candidates#new', :as => 'apply'
get 'candidates/single/:id' => 'candidates#single', :as => 'view_candidate'
get 'jobs/single/:id' => 'jobs#single', :as => 'single_job'
get 'add-job' => 'jobs#new'
get 'listings' => 'jobs#listings', :as => 'career_page'
get 'listing/:id' => 'jobs#listing', :as => 'view_job'
get 'welcome/index', constraints: { subdomain: 'www' }
get 'dashboard' => 'tenants#dashboard', as: 'dashboard'
constraints SubdomainConstraint do
devise_for :users, path_names: { edit: 'account' }
root 'tenants#dashboard'
end
root 'welcome#index'
没有错误,但是属性为Nil,在索引视图中显示URL而不是@job.title(因为它是Nil)
我认为表单数据被包装到 params
中的键 :job
中,因此 Job
的属性需要列入白名单
def update
@job = Job.find(params[:id])
@job.update(job_params)
if @job.save
redirect_to jobs_path(@job)
else
render "edit"
end
end
Private
def job_params
params.require(:job).permit(:title, :description)
end
当我尝试编辑 Job 模型的实例时,我尝试更新的属性设置为 Nil。
我试过使用常规的 form_for 帮助程序而不是 simple_form,因为我不知道 simple_form 是否需要额外的信息,例如要使用的操作和方法,但是没用。
edit.html.erb
<h1>Edit Job:</h1>
<br>
<%= simple_form_for @job do |f| %>
<%= f.input :title, label: "Job title" %>
<%= f.input :description, label: "Description" %>
<%= f.button :submit %>
<% end %>
jobs_controller.rb
def edit
@job = Job.find(params[:id])
end
def update
@job = Job.find(params[:id])
@job.update(title: params[:title], description: params[:description])
if @job.save
redirect_to jobs_path(@job)
else
render "edit"
end
end
routes.rb
resources :candidates
resources :tenants, constraints: { subdomain: 'www' }, except: :index
resources :jobs, path_names: { new: 'add' }
get 'candidates/index'
get 'candidates/new/:id' => 'candidates#new', :as => 'apply'
get 'candidates/single/:id' => 'candidates#single', :as => 'view_candidate'
get 'jobs/single/:id' => 'jobs#single', :as => 'single_job'
get 'add-job' => 'jobs#new'
get 'listings' => 'jobs#listings', :as => 'career_page'
get 'listing/:id' => 'jobs#listing', :as => 'view_job'
get 'welcome/index', constraints: { subdomain: 'www' }
get 'dashboard' => 'tenants#dashboard', as: 'dashboard'
constraints SubdomainConstraint do
devise_for :users, path_names: { edit: 'account' }
root 'tenants#dashboard'
end
root 'welcome#index'
没有错误,但是属性为Nil,在索引视图中显示URL而不是@job.title(因为它是Nil)
我认为表单数据被包装到 params
中的键 :job
中,因此 Job
的属性需要列入白名单
def update
@job = Job.find(params[:id])
@job.update(job_params)
if @job.save
redirect_to jobs_path(@job)
else
render "edit"
end
end
Private
def job_params
params.require(:job).permit(:title, :description)
end