我有一个带有以下内容的rails项目:
record.rb
class Track < ActiveRecord::Base
has_many :records
end
track.rb
class Record < ActiveRecord::Base
belongs_to :track
end
(顺便说一句,我的意思是这种联想,而不是像音乐行业那样!在这种情况下,一个轨道就像一个特定的类,一个记录将是一个特定的考试等级。每个轨道有多个记录,每条记录只能属于一条轨道等。)
然后在tracks/show.html.erb
中,我列出了属于特定轨道的所有记录。在底部,我想要一个“添加”链接,即类似
<%= link_to 'Add', new_record_path %>
我是铁杆菜鸟,我知道之前可能已经提出这个问题了。但是,我不确定如何将all the different位信息应用到我的问题中。我尝试将轨道作为参数传递给
<%= link_to 'Add', new_record_path(@track) %>
并在records_controller.rb中定义new
方法,如下所示
def new(track)
@record = Record.new
@record.track_id = track.id
end
但是我得到了错误wrong number of arguments (0 for 1)
,我认为这让我感到困惑,因为我在控制器中指定new
应该接受一个参数。无论如何,我怀疑这种方法是错误的,或者至少不像Ruby那样,因为在我看过的所有问题/教程中,都没有出现过这样的问题。如果有人能解释我如何能够直截了当地实现这一点(当然还有功能性的话),我将不胜感激......
答案 0 :(得分:0)
您可以在链接中传递该值:
<%= link_to 'Add', new_record_path(track_id: @track.id) %>
然后在records_controller.rb
:
def new
@track = Track.find(params[:track_id])
@record = Record.new(track_id: @track.id)
...
end
下一步是您需要在new
表单中设置一个隐藏字段,该字段将track_id
与create
方法一起发送,并将其与其他属性一起发送到您的<%= f.hidden_field :track_id %>
方法:
create
如果将track_id
与所有其他参数传递给new
方法,则track_id
方法不需要任何机会。只需检查您是否在record_params
方法中将{{1}}包含在允许的属性中。
另一种选择可能是将记录路由配置为nested rescource。我不知道在数据库模型的逻辑视图中这是否有意义。