基本上是一个用户是项目主页,他们点击添加新的网站,该网站设置了这样预设在控制器中的参数轨
<%= link_to 'Add Asset', new_website_path(:project_id => "#{@project.id}"), class: 'btn btn-md btn-danger' %>
,然后他们填写了一些数据表单上。不过,我希望这样,当他们提交该表单时,项目ID(来自他们刚才的项目页面)被保存在网站的project_id变量下,但出于某种原因,这不起作用。
class WebsitesController < ApplicationController
def new
@project = Project.find(params[:project_id])
@website = Website.new(:type => 'Website', :project_id => @project)
end
def create
@website = current_user.assets.build(website_params)
if @website.save
flash[:notice] = "Asset successfully added."
redirect_to(:controller => 'projects', :action => 'show', :id => @website.project_id)
else
render(:action => 'new')
end
end
private
def website_params
params.require(:website).permit(:id, :type,:url, :page_rank, :rev_company ,:social_pages)
end
end
有什么缺失,为什么这不工作?当我登录控制台时,我添加的所有网站都有一个零的project_id。
当我去到我的浏览器的形式,这是地址:
http://localhost:3000/websites/new?project_id=1
而且,我认为这是获得正确的项目ID,因为在形式我有着眼于项目ID的条件看它是否是类型的网站,如:
#views/websites/new.html.erb
<div class="col-md-5 col-md-offset-3">
<div class="panel panel-default newasset">
<div class="panel-heading">
<h3 class="panel-title ptd"><%= "New #{@project.type}" %></h3>
</div>
<div class='panel-body'>
<div class='form group'>
<%= simple_form_for(@website, html: {class: 'form-group' }) do |f| %>
<% if (@project.type == 'Website') %>
<div class="col-xs-4 col-xs-offset-3">
<%= f.input :title, label: 'Website Name' %>
<%= f.input :url %>
<%= f.input :rev_company, label: "Revenue Company" %>
<%= f.input :social_pages, label: "Number of Social Sites" %>
<%= f.input :page_rank %><br />
<div class="form-actions">
<%= f.button :submit, class: 'btn btn-primary' %>
</div>
<% else %>
You should not see this
<% end %>
<% end %>
</div>
</div>
</div>
</div>
嘿谢谢你的答案。我该把这个放在哪个方法中?新的或创建方法?这也会创建一个新的项目,每次我想建立一个资产?因为我只希望它创建新网站并将它们添加到现有项目 – HarryLucas
这是用于新方法。 create方法将需要更改id,如另一个答案中所述的project_id。 – tebayoso