Ruby on rails Rails表单关联-从上一页传递id
试图弄清楚我们如何在形式上建立协会 我有3种型号:Ruby on rails Rails表单关联-从上一页传递id,ruby-on-rails,forms,ruby-on-rails-4,associations,model-associations,Ruby On Rails,Forms,Ruby On Rails 4,Associations,Model Associations,试图弄清楚我们如何在形式上建立协会 我有3种型号: class Request < ActiveRecord::Base has many :answers has many :users, through: :answers end class Answer < ActiveRecord::Base belongs to :user belongs to :request end class User < ActiveRecord::Base h
class Request < ActiveRecord::Base
has many :answers
has many :users, through: :answers
end
class Answer < ActiveRecord::Base
belongs to :user
belongs to :request
end
class User < ActiveRecord::Base
has many :answers
has many :requests, through: :answers
end
类请求
我试图弄明白:如何让用户链接到Request#Show
中的Answer#new
,然后创建一个应答记录,将上一页中的Request#Show
Request(id)创建在用户的应答
和他正在查看的请求
之间的关联
我现在的方法是:我在request#Show
上闪烁request#id
值,然后当用户链接到Answer#new
时,它将闪烁的值传递到Answer#new上的隐藏表单标记中。这似乎不是最好的方法
有什么想法吗?使用flash的创造性方法令人赞叹,不过你的右手边有一个简单的方法。您可以在控制器之间传递参数,就像在使用路由名称的方法之间传递参数一样 我没有完全理解你在这个案例中想要达到的目的,但是看起来这篇博客应该让你开始
祝你好运 使用flash的创造性方法值得称赞,不过你的右手边有一个简单的方法。您可以在控制器之间传递参数,就像在使用路由名称的方法之间传递参数一样 我没有完全理解你在这个案例中想要达到的目的,但是看起来这篇博客应该让你开始 祝你好运 从
Request\Show
这可以通过或(或两者)之一实现。让我解释一下:
我肯定会在您的
请求中添加嵌套资源
路由:
#config/routes.rb
resources :requests do
resources :answers, only: [:new, :create] #-> url.com/requests/:request_id/answers [POST]
end
这使您能够调用“嵌套”路由(即向子控制器发送数据并要求将“父”数据附加到请求的路由)
在您的情况下,您希望为请求创建一个答案。最有效的方法是使用如上所述的路由结构;这将允许您使用以下控制器方法:
#app/controllers/answers_controller.rb
class AnswersController < ApplicationController
def new
@request = Request.find params[:request_id]
@answer = @request.answers.new
end
def create
@request = Request.find params[:request_id]
@answer = @request.answers.new answer_params
@answer.save
end
private
def answer_params
params.require(:answer).permit(:title, :body)
end
end
这将使您能够在此处访问此会话:
#app/controllers/answers_controller.rb
class AnswersController < ApplicationController
def new
user = User.find session[:user_id]
end
end
#app/views/requests/show.html.erb
<%= link_to "New Answer", request_new_answer_path(request) %>
要将@用户
分配给新的应答
记录,只需在应答#创建
中执行此操作:
#app/controllers/answers_controller.rb
class AnswersController < ApplicationController
...
def create
@request = Request.find params[:request_id]
@answer = @request.answers.new answer_params
@answer.user = current_user
@answer.save
end
end
#app/controllers/answers_controller.rb
类应答器控制器<应用程序控制器
...
def创建
@request=request.find参数[:request\u id]
@answer=@request.answers.new answer\u参数
@answer.user=当前用户
@回答。保存
结束
结束
从Request\Show
这可以通过或(或两者)之一实现。让我解释一下:
我肯定会在您的
请求中添加嵌套资源
路由:
#config/routes.rb
resources :requests do
resources :answers, only: [:new, :create] #-> url.com/requests/:request_id/answers [POST]
end
这使您能够调用“嵌套”路由(即向子控制器发送数据并要求将“父”数据附加到请求的路由)
在您的情况下,您希望为请求创建一个答案。最有效的方法是使用如上所述的路由结构;这将允许您使用以下控制器方法:
#app/controllers/answers_controller.rb
class AnswersController < ApplicationController
def new
@request = Request.find params[:request_id]
@answer = @request.answers.new
end
def create
@request = Request.find params[:request_id]
@answer = @request.answers.new answer_params
@answer.save
end
private
def answer_params
params.require(:answer).permit(:title, :body)
end
end
这将使您能够在此处访问此会话:
#app/controllers/answers_controller.rb
class AnswersController < ApplicationController
def new
user = User.find session[:user_id]
end
end
#app/views/requests/show.html.erb
<%= link_to "New Answer", request_new_answer_path(request) %>
要将@用户
分配给新的应答
记录,只需在应答#创建
中执行此操作:
#app/controllers/answers_controller.rb
class AnswersController < ApplicationController
...
def create
@request = Request.find params[:request_id]
@answer = @request.answers.new answer_params
@answer.user = current_user
@answer.save
end
end
#app/controllers/answers_controller.rb
类应答器控制器<应用程序控制器
...
def创建
@request=request.find参数[:request\u id]
@answer=@request.answers.new answer\u参数
@answer.user=当前用户
@回答。保存
结束
结束
像这样的东西对我很有用:
- 我有两个模型(公式和公式材料)
- 公式有很多公式材料,属于公式
- 我的公式控制器将@Formula设置为: @公式=公式。查找(参数[:id])
- 通过在公式控制器中声明,我在公式show.html.erb中列出了公式材料,如下所示: @formula_materials=FormulaMaterial。其中(:formula_id=>@formula)
- 当我想向公式中添加新的FormulaMaterial时,我的show.html.erb文件中的“new Formula Material”按钮如下所示:
<%= link_to 'Add Material To Formula', new_formula_material_path(:formula_id => @formula), class: "btn btn-success" %>
@formula),类:“btn btn成功”%>
- 在“新路径”中,我将相关id设置为@formula变量。当我的FormulaMaterial传递到new.html.erb时,我的URL如下所示:
- 在我的FormulaMaterial new.html.erb文件中,我创建了一个隐藏的_字段,通过使用“params”访问URL中的公式_id来设置关联值,如下所示: 参数[:公式\u id]>
希望这有帮助 像这样的事情对我很有用:
- 我有两个模型(公式和公式材料)
- 公式有很多公式材料,属于公式
- 我的公式控制器将@Formula设置为: @公式=公式。查找(参数[:id])
- 通过在公式控制器中声明,我在公式show.html.erb中列出了公式材料,如下所示: @formula_materials=FormulaMaterial。其中(:formula_id=>@formula)
- 当我想向公式中添加新的FormulaMaterial时,我的show.html.erb文件中的“new Formula Material”按钮如下所示:
<%= link_to 'Add Material To Formula', new_formula_material_path(:formula_id => @formula), class: "btn btn-success" %>
@formula),类:“btn btn成功”%>
- 在"新"时代,_