你能解释一下我在教程中找到的这种语法吗? <%= link_to 'Show Previous', '?m=all' %>
Could you explain this syntax that I found in a tutorial? <%= link_to 'Show Previous', '?m=all' %>
我正在学习教程,发现以下内容现在在我的 app/views/message/index.html.erb
中
<%= link_to 'Show Previous', '?m=all' %>
我以前从未见过 '?m=all'
部分,我正在尝试了解它的工作原理。
下面是app/controllers/messages_controller.rb
中的相关控制器
def index
@messages = @conversation.messages
if @messages.length > 10
@over_ten = true
@messages = @messages[-10..-1]
end
if params[:m]
@over_ten = false
@messages = @conversation.messages
end
if @messages.last
if @messages.last.user_id != current_user.id
@messages.last.read = true;
end
end
@message = @conversation.messages.new
end
params[:m]
从哪里获取参数?它接收的唯一路径是 conversation_messages_path(@conversation)
辅助路径,MessagesController 的参数为
def message_params
params.require(:message).permit(:body, :user_id)
end
此外,控制器内部(第 13 行)...@messages.last.read = true;
对我来说也没有意义。我的消息 class 有一个布尔值用于它的 #read
方法,但它没有保存该方法,并且有一个分号,我在教程代码的其他任何地方都看不到它。
短
您的 m
变量来自查询字符串参数。
更多
link_to
辅助方法的签名是
link_to(name = nil, options = nil, html_options = nil, &block)
Creates an anchor element of the given name using a URL created by the set of options. See the valid options in the documentation for url_for. It’s also possible to pass a String instead of an options hash, which generates an anchor element that uses the value of the String as the href for the link.
根据您的情况,它将 link 呈现到您的 messages#index
路径(当前页面):
您可以这样重写您的 link_to 示例:
link_to 'Show Previous', messages_path(m: 'all')
结果相同。
好的,让我们更进一步。
...
if params[:m]
@over_ten = false
@messages = @conversation.messages
end
...
m
参数有一个简单的存在检查,因此如果您将值 all
更改为其他值,例如 foo
或 blabla
,结果仍然是一样。
分号不是必需的,因为你只有一个新的一行接一个
Ruby interprets semicolons and newline characters as the ending of a
statement. However, if Ruby encounters operators, such as +, −, or
backslash at the end of a line, they indicate the continuation of a
statement.
我正在学习教程,发现以下内容现在在我的 app/views/message/index.html.erb
<%= link_to 'Show Previous', '?m=all' %>
我以前从未见过 '?m=all'
部分,我正在尝试了解它的工作原理。
下面是app/controllers/messages_controller.rb
中的相关控制器
def index
@messages = @conversation.messages
if @messages.length > 10
@over_ten = true
@messages = @messages[-10..-1]
end
if params[:m]
@over_ten = false
@messages = @conversation.messages
end
if @messages.last
if @messages.last.user_id != current_user.id
@messages.last.read = true;
end
end
@message = @conversation.messages.new
end
params[:m]
从哪里获取参数?它接收的唯一路径是 conversation_messages_path(@conversation)
辅助路径,MessagesController 的参数为
def message_params
params.require(:message).permit(:body, :user_id)
end
此外,控制器内部(第 13 行)...@messages.last.read = true;
对我来说也没有意义。我的消息 class 有一个布尔值用于它的 #read
方法,但它没有保存该方法,并且有一个分号,我在教程代码的其他任何地方都看不到它。
短
您的 m
变量来自查询字符串参数。
更多
link_to
辅助方法的签名是
link_to(name = nil, options = nil, html_options = nil, &block)
Creates an anchor element of the given name using a URL created by the set of options. See the valid options in the documentation for url_for. It’s also possible to pass a String instead of an options hash, which generates an anchor element that uses the value of the String as the href for the link.
根据您的情况,它将 link 呈现到您的 messages#index
路径(当前页面):
您可以这样重写您的 link_to 示例:
link_to 'Show Previous', messages_path(m: 'all')
结果相同。
好的,让我们更进一步。
...
if params[:m]
@over_ten = false
@messages = @conversation.messages
end
...
m
参数有一个简单的存在检查,因此如果您将值 all
更改为其他值,例如 foo
或 blabla
,结果仍然是一样。
分号不是必需的,因为你只有一个新的一行接一个
Ruby interprets semicolons and newline characters as the ending of a statement. However, if Ruby encounters operators, such as +, −, or backslash at the end of a line, they indicate the continuation of a statement.