我使用Ruby on Rails v4,而且我有一个奇怪的问题,我无法找到原因。我有一个rails视图,我试图在其中创建一个简单的记录链接。在我看来,我正在使用
public class Cube extends View {
private final static String TEST_STRING = "ABC";
private Paint mBackgroundPaint;
private Paint mTextPaint;
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public Cube(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init();
}
public Cube(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
public Cube(Context context, AttributeSet attrs) {
this(context, attrs, -1);
}
public Cube(Context context) {
this(context, null, -1);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// Just for demo purposes this should be calculated properly
int desiredWidth = 100;
int desiredHeight = 100;
setMeasuredDimension(desiredWidth, desiredHeight);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int savedCount = canvas.save();
drawRectangle(canvas);
drawText(canvas);
canvas.restoreToCount(savedCount);
}
private void init() {
mBackgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mBackgroundPaint.setColor(Color.BLUE);
mBackgroundPaint.setStyle(Paint.Style.FILL);
mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mTextPaint.setStyle(Paint.Style.FILL_AND_STROKE);
// This need to be adjusted based on the requirements that you have
mTextPaint.setTextSize(20.0f);
}
private void drawRectangle(Canvas canvas) {
canvas.drawRect(0, 0, getWidth(), getHeight(), mBackgroundPaint);
}
private void drawText(Canvas canvas) {
Rect rect = new Rect();
// For simplicity I am using a hardcoded string
mTextPaint.getTextBounds(TEST_STRING, 0, 1, rect);
int w = getWidth(), h = getHeight();
float x = (w - rect.width()) / 2, y = ((h - rect.height()) / 2) + rect.height();
canvas.drawText(TEST_STRING, 0, 1, x, y, mTextPaint);
}
}
结果是一个看起来像这样的HTML链接
<%= link_to contact.first_name + " " + contact.last_name, contact %>
将我带到我的应用程序的联系页面,而不是向我显示ID为5的联系人。
这就是我的简化routes.rb看起来像
http://someurl.com/contact.5
这些是我的路线:
Rails.application.routes.draw do
root 'dashboard#index'
get 'help' => 'static_pages#help'
get 'about' => 'static_pages#about'
get 'contact' => 'static_pages#contact'
resources :customers
resources :contacts
end
当我使用与上面相同的语法链接到客户时,链接工作正常。我弄乱了什么,当链接显示联系时,为什么它会向我发送联系页面.5?
感谢。
答案 0 :(得分:0)
你的route.rb中的行给出了这个冲突:
download(base64toBlob(response,"application/vnd.apple.pkpass"), filename.replace(/\"/g,''), mime);
答案 1 :(得分:0)
这是因为您已经定义了提供contact_url
帮助程序的路线:
get 'contact' => 'static_pages#contact'
这意味着您可以使用contact_url
或contact_path
来获取静态联系页面的路线。
当rails尝试链接到对象时,它使用该对象类型的url helper方法。因此,当您执行link_to(..., contact)
时,它会使用现有的contact_url
方法生成路由。
您也可以在rake routes
输出中看到(客户和联系人之间)的差异。对于客户,您可以获得#show
操作行的不同输出:
customer GET /customers/:id(.:format) customers#show
对于联系人contact
,但遗失了:
GET /contacts/:id(.:format) contacts#show
因为已经定义了contact
路由。
您可以通过为静态联系路由定义不同的名称来解决问题:
get 'contact', to: 'static_pages#contact', as: :static_contact