Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 呈现形式部分-未定义的方法'to#u key';_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 呈现形式部分-未定义的方法'to#u key';

Ruby on rails 呈现形式部分-未定义的方法'to#u key';,ruby-on-rails,ruby,Ruby On Rails,Ruby,我试图在一个单独的控制器中呈现一个部分窗体 #app/views/users/my_transactions.html.erb <%= render 'transactions/form', transaction: @transaction %> 及 提前谢谢你!!我找不到任何解决方案,我已经阅读了大量文档,希望能够解决这个问题 编辑 渲染调用的更清晰视图(通过@engineersmnky修复) #app/views/users/my_transactions.html.erb

我试图在一个单独的控制器中呈现一个部分窗体

#app/views/users/my_transactions.html.erb
<%= render 'transactions/form', transaction: @transaction %>

提前谢谢你!!我找不到任何解决方案,我已经阅读了大量文档,希望能够解决这个问题

编辑 渲染调用的更清晰视图(通过@engineersmnky修复)

#app/views/users/my_transactions.html.erb
新交易
当前交易
显示部分内容的清晰视图

#app/views/transactions/_show.html.erb
<% @user.transactions.each do |transaction| %>
<tr>
  <td class="date"><%= transaction.created_at.strftime("%D") %></td>
  <td><%= transaction.amount %></td>
  <td class="convert-category"><%= transaction.category %></td>
  <td class="convert-sub-category"><%= transaction.sub_category %></td>
  <td><%= transaction.notes%></td>
  
#app/views/transactions/_show.html.erb

您的问题在
用户控制器中

transactioncontroller#create
方法应该可以,因为您只引用了一个
事务
。在
userscocontroller
中,您正在为
当前用户引用
事务的集合,因此出现错误

您应该可以将此更改为

def my_transactions
  @transaction = current_user.transactions.build
  @user = current_user 
end
这样,
@transaction
将是一个新的
事务
,在两种上下文中都与
当前用户
关联

另一个选项是,如果要显示所有事务以及添加新事务的能力,则不要使用
userscocontroller
,而是将render语句更改为:

#app/views/users/my_transactions.html.erb
<%= render 'transactions/form', transaction: @user.transactions.build %>
#app/views/users/my_transactions.html.erb

这将对表单产生与上述相同的效果,但会将您的
@transaction
实例变量保留为
事务的集合,以便在该视图上显示。

我认为问题发生在
渲染
方法: 在这里,您传递的是
@transaction
,就好像它是单个对象,但却是一个集合。您应该将集合选项与
render
一起使用。大概是这样的:

# app/views/users/my_transactions.html.erb
<%= render partial: 'transactions/form', collection: @transactions %>
#app/views/users/my_transactions.html.erb

更多信息,请参阅Rails Guide()第3.4.5节。

当我重新排列我的#app/views/users/my#u transactions.html.erb以在顶部通过显示当前事务时,选项2会起作用,但我希望显示渲染新的部分,然后显示部分。我知道这与在显示部分之前呈现表单的实例变量处理有关。作为参考,_show.html.erb以@jcxswc开头,您的评论非常不清楚。如果您想在表单下方显示部分内容,只需在
之后添加
,但我会假设
TransactionController#show
是一个单一事务的RESTful表示,具有类似“/transactions/:id”的路径,抱歉不够清晰。通过_form.html.erb右下方的_show.html.erb部分,我显示了完整的事务列表。因此,用户可以在网页顶部添加事务,但也可以在底部查看所有事务。在_show.html.erb中,启动每个循环都是
render
不是问题。错误为(事务)
form\u,因为正在传递的本地
事务
集合代理
而不是
事务的单个实例
#app/views/transactions/_show.html.erb
<% @user.transactions.each do |transaction| %>
<tr>
  <td class="date"><%= transaction.created_at.strftime("%D") %></td>
  <td><%= transaction.amount %></td>
  <td class="convert-category"><%= transaction.category %></td>
  <td class="convert-sub-category"><%= transaction.sub_category %></td>
  <td><%= transaction.notes%></td>
  
def my_transactions
  @transaction = current_user.transactions.build
  @user = current_user 
end
#app/views/users/my_transactions.html.erb
<%= render 'transactions/form', transaction: @user.transactions.build %>
# app/views/users/my_transactions.html.erb
<%= render partial: 'transactions/form', collection: @transactions %>